O dotnet-counters é uma ferramenta de diagnóstico essencial para engenheiros de software que trabalham com .NET. Ele permite o monitoramento de desempenho em tempo real através da API EventCounter, sendo ideal para análises preliminares de saúde da aplicação e investigação de gargalos de performance. Com ele, é possível observar métricas como uso de CPU, taxas de exceção e comportamento do Garbage Collector (GC) sem impacto significativo no processo monitorado.
Instalação e Configuração
A ferramenta é distribuída como um pacote NuGet e pode ser instalada globalmente utilizando a interface de linha de comando (CLI) do .NET:
dotnet tool install --global dotnet-counters
Para garantir a compatibilidade, verifique as versões do SDK instaladas no ambiente antes de prosseguir:
dotnet --list-sdks
Se for necessário instalar uma versão específica para corresponder ao seu ambiente de desenvolvimento, utilize o parâmetro --version:
dotnet tool install --global dotnet-counters --version 6.0.300
Comandos Fundamentais
O funcionamento da ferramenta gira em torno de quatro comandos principais que estruturam o fluxo de trabalho de diagnóstico:
- ps: Lista todos os processos .NET que estão em execução atualmente no sistema.
- list: Exibe uma lista detalhada de contadores disponíveis, organizados por provedor, com suas respectivas descrições.
- monitor: Exibe valores de contadores selecionados em tempo real, atualizando-os periodicamente no console.
- collect: Coleta dados de métricas e os exporta para um arquivo (CSV ou JSON) para aálise histórica posterior.
Identificação e Monitoramento de Processos
O primeiro passo para o diagnóstico é identificar o Process ID (PID) da aplicação alvo. Utiliza-se o comando ps para listar os processos ativos:
dotnet-counters ps
Após obter o PID (por exemplo, 4852), inicie o monitoramento contínuo. O comando abaixo enicia a observação do processo, atualizando os dados a cada segundo:
dotnet-counters monitor --process-id 4852 --refresh-interval 1
Aálise de Métricas de Runtime
Por padrão, ao executar o monitor sem filtros, métricas do namespace System.Runtime são exibidas. Estas métricas fornecem uma visão geral do estado da aplicação, incluindo gerenciamento de memória e processamento:
[System.Runtime]
% Time in GC since last GC (%) 0
Allocation Rate (B / 1 sec) 82,100
CPU Usage (%) 5
Exception Count (Count / 1 sec) 0
GC Heap Size (MB) 45
Gen 0 GC Count (Count / 1 sec) 2
ThreadPool Thread Count 12
Working Set (MB) 128
Indicadores como GC Heap Size e Allocation Rate são cruciais para identificar vazamentos de memória ou pressão excessiva sobre o coletor de lixo.
Monitoramento Específico para Aplicações Web
Para serviços ASP.NET Core, é possível filtrar apenas os contadores relevantes para o contexto web, como taxas de requisição. O exemplo abaixo monitora o provedor Microsoft.AspNetCore.Hosting para o PID 7421:
dotnet-counters monitor -p 7421 --refresh-interval 1 --counters Microsoft.AspNetCore.Hosting
O resultado apresentado foca exclusivamente na saúde do servidor web:
[Microsoft.AspNetCore.Hosting]
Current Requests 12
Failed Requests 0
Request Rate (Count / 1 sec) 55
Total Requests 1050
Este filtro permite uma leitura rápida da capacidade de processamento e falhas de requisição em ambientes de produção.