O agente .NET da New Relic coleta métricas do runtime .NET sobre o desempenho da sua aplicação. 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.
O conjunto completo de métricas de desempenho do .NET está disponível nas versões 8.20 e superiores do agente .NET.
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:
CPU/User/Utilization
A porcentagem de CPU consumida por esse processo.
CPU/User Time
A quantidade de tempo que o processo gastou executando o código do aplicativo.
Métrica de memória
São coletadas as seguintes métricas de memória:
Memory/Physical
A quantidade de memória privada (física), em MB, alocada para o processo.
Memory/WorkingSet
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.
Dica
As métricas de coleta de lixo estão disponíveis para:
- Todas as versões do framework .NET
- .NET Core 3.0 e superior.
Importante
Para aplicativos .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 "desempenho monitor usuário" e "desempenho log usuário". 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:
GC/Handles
O número de referências a objetos.
GC/Induced
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
GC.Collect
no código do aplicativo.GC/PercentTimeInGC
(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 GC Gen0 são coletadas:
GC/Gen0/Size
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.
GC/Gen0/Promoted
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.
GC/Gen0/Collections
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 do GC Gen1 são coletadas:
GC/Gen1/Size
A quantidade de memória (em MB) usada no heap da Geração 1. Isso difere de Gen0/Size, que mede a quantidade máxima de memória disponível para o heap da geração 0.
GC/Gen1/Promoted
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.
GC/Gen1/Collections
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 do GC Gen2 são coletadas:
GC/Gen2/Size
A quantidade de memória (em MB) que está sendo usada pelo Heap Gen2.
GC/Gen2/Survived
(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.GC/Gen2/Collections
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 GC LOH são coletadas:
GC/LOH/Size
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.
GC/LOH/Survived
(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.
Threadpool/Worker/Available
Identifica o número de threads gerenciados disponíveis para o processo. Números consistentemente baixos indicam um cenário potencial de fome.
Threadpool/Worker/InUse
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.
Threadpool/Completion/Available
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.
Threadpool/Completion/InUse
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.
Threadpool/Throughput/Requested
Identifica o número de vezes que o trabalho foi solicitado para ser executado em um encadeamento gerenciado de conjunto de encadeamentos diferente.
Threadpool/Throughput/Started
Identifica o número de itens de trabalho solicitados para serem executados em um thread separado que iniciou a execução.
Threadpool/Throughput/QueueLength
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 artigo a seguir descreve como modificar o número de threads disponíveis para um aplicativo.