O agente .NET da New Relic coleta métricas do runtime .NET sobre o desempenho do seu aplicativo. Essas métricas podem fornecer insights sobre quanta CPU e memória um aplicativo consome, bem como como o desempenho de um aplicativo pode ser afetado pela coleta de lixo e pela contenção de recursos do pool de threads.
Você pode ver essas métricas em one.newrelic.com > All capabilities > APM & services. Selecione um aplicativo e vá para More views > Dotnet VMs.
Você também pode visualizar essas métricas por:
- Criando um dashboard personalizado.
- Usando Metric explorer em one.newrelic.com > All capabilities > APM & services > selecione um aplicativo e vá para More views.
Métrica de CPU
As seguintes métricas de CPU são coletadas:
| A porcentagem de CPU consumida por esse processo. |
| A quantidade de tempo que o processo gastou executando o código do aplicativo. |
Métrica de memória
São coletadas as seguintes memórias métricas:
| A quantidade de memória privada (física), em MB, alocada para o processo. |
| Quantidade de memória física alocada para o processo. |
Métrica de coleta de lixo
O coletor de lixo .NET é executado em segundo plano e é responsável por identificar e recuperar memória vinculada a objetos que não são mais referenciados por um aplicativo. A métrica a seguir pode ser útil na identificação de padrões de alocação de objetos e potenciais cenários de sobrealocação. Este artigo explica melhor os fundamentos da coleta de lixo no .NET.
Importante
Para o aplicativo .NET framework , o usuário do Windows sob o qual seu aplicativo é executado deve ter acesso aos dados do contador de desempenho do Windows. Geralmente isso é feito adicionando o usuário aos grupos Performance Monitor Users e Performance Log Users . Permissões insuficientes farão com que o agente não colete a métrica de coleta de lixo.
Métrica geral
Adicionalmente, são coletadas as seguintes métricas de coleta de lixo:
| O número de referências a objetos. |
| Normalmente, o tempo de execução executa a coleta de lixo automaticamente. Esta métrica identifica o número de vezes que a Coleta de Lixo foi invocada manualmente por uma chamada explícita para
no código do aplicativo. |
(somente framework .NET) | A porcentagem de tempo decorrido que o tempo de execução do .NET gastou executando a coleta de lixo desde o último ciclo de coleta de lixo. |
Geração - 0 heap
As seguintes métricas Gen0 de coleta de lixo são coletadas:
| A quantidade de memória (em MB) que está disponível para ser alocada na Geração 0. Isso não indica a quantidade de memória que está sendo usada pela Geração 0, mas sim o máximo disponível para ser alocada. |
| A quantidade de memória (em MB) que sobreviveu à coleta de lixo e foi promovida de Gen0 para Gen1. A memória sobrevive à coleta de lixo quando há uma referência ativa a ela. |
| O número de vezes que a Coleta de Lixo da Geração 0 foi executada pelo coletor de lixo. |
Geração - 1 pilha
As seguintes métricas Gen1 de coleta de lixo são coletadas:
| A quantidade de memória (em MB) usada no heap da Geração 1. Isso difere de
que mede a quantidade máxima de memória disponível para o heap da geração 0. |
| A quantidade de memória (em MB) que sobreviveu à coleta de lixo e foi promovida da Gen1 para a Gen2. A memória sobrevive à coleta de lixo quando há uma referência ativa a ela. |
| O número de vezes que a Coleta de Lixo da Geração 1 foi executada pelo coletor de lixo. |
Geração - 2 pilhas
As seguintes métricas Gen2 de coleta de lixo são coletadas:
| A quantidade de memória (em MB) que está sendo usada pelo Heap Gen2. |
(somente .NET Core) | A quantidade de memória (em MB) que sobreviveu à coleta de lixo. A memória sobrevive à coleta de lixo quando há uma referência ativa a ela. Ao contrário da Gen0 e da Gen1, a memória que sobrevive à coleta de lixo não é promovida. |
| O número de vezes que a Coleta de Lixo da Geração 2 foi executada pelo coletor de lixo. |
Pilha de objetos grandes (LOH)
As seguintes métricas LOH de coleta de lixo são coletadas:
| A quantidade de memória (em MB) que está sendo usada pelo Large Object Heap (LOH). No .NET Core, o heap de objetos grandes às vezes é chamado de Gen3. |
(somente .NET Core) | A quantidade de memória (em MB) que sobreviveu à coleta de lixo. A memória sobrevive à coleta de lixo quando há uma referência ativa a ela. Ao contrário da Gen0 e da Gen1, a memória que sobrevive à coleta de lixo não é promovida. |
Métrica do pool de threads gerenciado
O tempo de execução do .NET gerencia um conjunto de threads. A métrica a seguir fornece visibilidade do desempenho de um aplicativo em termos de pool de threads e pode ajudar a identificar áreas de escassez de pool de threads. A privação/contenção do pool de threads ocorre quando não há threads suficientes disponíveis para processar as solicitações feitas por um aplicativo. O artigo a seguir descreve os vários recursos do pool de threads gerenciados. Observe que essas métricas não incluem informações sobre threads que não são gerenciados pelo pool de threads.
Threads de trabalho
Threads de trabalho são threads vinculados à CPU empregados para executar trabalho em nome de um processo.
| Identifica o número de threads gerenciados disponíveis para o processo. Números consistentemente baixos indicam um cenário potencial de fome. |
| Identifica o número de threads de trabalho atualmente em uso pelo processo. |
Tópicos de conclusão
Threads de conclusão, às vezes chamados de threads de E/S, são empregados para monitor a conclusão de operações de E/S.
| Esta métrica identifica o número de threads atualmente disponíveis para o processo. Números consistentemente baixos indicam um cenário potencial de fome. |
| Esta métrica identifica o número de threads de conclusão atualmente em uso pelo processo. |
Taxas de transferência
Taxas de transferência métrica medem quanto trabalho foi solicitado para ser executado em um thread diferente, a quantidade de trabalho que foi iniciado e quanto trabalho está aguardando que um recurso do pool de threads fique disponível.
| Identifica o número de vezes que o trabalho foi solicitado para ser executado em um encadeamento gerenciado de conjunto de encadeamentos diferente. |
| Identifica o número de itens de trabalho solicitados para serem executados em um thread separado que iniciou a execução. |
| Identifica o número de itens de trabalho que foram solicitados, mas estão aguardando para serem iniciados. Os números que aumentam consistentemente indicam uma situação potencial de falta de pool de threads. O a seguir descreve como modificar o número de threads disponíveis para um aplicativo. |