Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo se aplica a: ✔️ dotnet-counters versão 3.0.47001 e versões posteriores.
Os contadores podem ser lidos de aplicativos que executam o .NET 5 ou posterior.
Instalar
Há três maneiras de baixar e usar dotnet-counters:
Execução de um tiro (recomendado):
A partir do .NET 10.0.100, você pode ser executado
dotnet-counterssem instalação permanente usandodnx:dnx dotnet-counters [options]Por exemplo:
dnx dotnet-counters monitor --process-id 1234Essa abordagem baixa e executa automaticamente a versão mais recente sem modificar permanentemente seu sistema.
Ferramenta global dotnet:
Para instalar a versão de versão mais recente do
dotnet-counterspacote NuGet para uso frequente, use o comando de instalação da ferramenta dotnet :dotnet tool install --global dotnet-countersEsse comando instala um
dotnet-countersbinário no caminho das Ferramentas do SDK do .NET, que você pode adicionar ao SEU PATH para invocar facilmente ferramentas instaladas globalmente.Download direto:
Baixe o executável da ferramenta que corresponde à sua plataforma:
Sistema operacional Plataforma Windows x86 | x64 | Braço | Arm-x64 Linux x64 | Braço | Arm64 | musl-x64 | musl-Arm64
Observação
Para usar dotnet-counters em um aplicativo x86, você precisa de uma versão x86 correspondente da ferramenta.
Sinopse
dotnet-counters [-h|--help] [--version] <command>
Descrição
O dotnet-counters é uma ferramenta de monitoramento de desempenho para monitoramento de integridade de primeiro nível e investigação de desempenho. Ele pode observar valores de contador de desempenho publicados por meio da API EventCounter ou da API Meter. Por exemplo, você pode monitorar rapidamente coisas como o uso da CPU ou a taxa de exceções que estão sendo geradas em seu aplicativo .NET Core para ver se há algo suspeito antes de mergulhar em uma investigação de desempenho mais séria usando PerfView ou dotnet-trace.
Opções
--versionExibe a versão do
dotnet-countersutilitário.-h|--helpMostra a ajuda da linha de comando.
Comandos
| Comando |
|---|
| dotnet-counters collect |
| monitor de contadores dotnet |
| dotnet-counters ps |
dotnet-counters collect
Colete periodicamente os valores de contador selecionados e exporte-os para um formato de arquivo especificado para pós-processamento.
Sinopse
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
Opções
-p|--process-id <PID>A ID do processo do qual coletar dados do contador.
Observação
No Linux e no macOS, usar essa opção requer o aplicativo de destino e
dotnet-counterscompartilhar a mesmaTMPDIRvariável de ambiente. Caso contrário, o comando terá um tempo limite.-n|--name <name>O nome do processo do qual coletar dados do contador.
Observação
No Linux e no macOS, usar essa opção requer o aplicativo de destino e
dotnet-counterscompartilhar a mesmaTMPDIRvariável de ambiente. Caso contrário, o comando terá um tempo limite.--diagnostic-port <port-address[,(listen|connect)]>Define a porta de diagnóstico usada para se comunicar com o processo a ser monitorado.
dotnet-counterse o runtime do .NET dentro do processo de destino deve concordar com o endereço da porta, com um escutando e o outro se conectando.dotnet-countersdetermina automaticamente a porta correta ao anexar usando as opções ou--process-idou--nameao iniciar um processo usando a opção-- <command>. Geralmente, só é necessário especificar a porta explicitamente ao aguardar um processo que será iniciado no futuro ou se comunicar com um processo em execução dentro de um contêiner que não faz parte do namespace de processo atual.As
port-addressdiferenças por sistema operacional:- Linux e macOS – um caminho para um soquete de domínio unix, como
/foo/tool1.socket. - Windows – um caminho para um pipe nomeado, como
\\.\pipe\my_diag_port1. - Android, iOS e tvOS – um IP:port como
127.0.0.1:9000.
Por padrão,
dotnet-countersescuta no endereço especificado. Em vez disso, você pode solicitardotnet-countersa conexão acrescentando,connectapós o endereço. Por exemplo,--diagnostic-port /foo/tool1.socket,connectse conectará a um processo de runtime do .NET que está escutando o/foo/tool1.socketsoquete de domínio unix.Para obter informações sobre como usar essa opção para iniciar o monitoramento de contadores da inicialização do aplicativo, consulte usando a porta de diagnóstico.
- Linux e macOS – um caminho para um soquete de domínio unix, como
--refresh-interval <SECONDS>O número de segundos de atraso entre a atualização dos contadores exibidos
--counters <COUNTERS>Lista de contadores separados por vírgulas. Contadores podem ser especificados
provider_name[:counter_name]. Se oprovider_namefor usado sem uma lista qualificada de contadores, todos os contadores do provedor serão mostrados. Para descobrir nomes de provedor e contador, consulte métricas internas. Para EventCounters,provider_nameé o nome do EventSource e para Medidores,provider_nameé o nome do Medidor.--format <csv|json>O formato a ser exportado. Atualmente disponível: csv, json.
-o|--output <output>O nome do arquivo de saída.
-- <command>Após os parâmetros de configuração da coleção, o usuário pode acrescentar
--seguido por um comando para iniciar um aplicativo .NET.dotnet-countersinicia um processo com o comando fornecido e coleta as métricas solicitadas. Isso geralmente é útil para coletar métricas para o caminho de inicialização do aplicativo e pode ser usado para diagnosticar ou monitorar problemas que ocorrem antes ou logo após o ponto de entrada principal.Observação
O uso dessa opção monitora o primeiro processo do .NET que se comunica de volta com a ferramenta, o que significa que, se o comando iniciar vários aplicativos .NET, ele coletará apenas o primeiro aplicativo. Portanto, é recomendável que você use essa opção em aplicativos autocontidos ou usando a opção
dotnet exec <app.dll>.Observação
Se você iniciar um executável do .NET por meio
dotnet-countersdele, sua entrada/saída será redirecionada e você não poderá interagir com seu stdin/stdout. Você pode sair da ferramenta por meio de Ctrl+C ou SIGTERM para encerrar com segurança a ferramenta e o processo filho. Se o processo filho for encerrado antes da ferramenta, a ferramenta também será encerrada. Se você precisar usar stdin/stdout, poderá usar a opção--diagnostic-port. Para obter mais informações, consulte Usando a porta de diagnóstico.
Observação
Para coletar métricas usando dotnet-counters, ele precisa ser executado como o mesmo usuário que o usuário que executa o processo de destino ou como raiz. Caso contrário, a ferramenta não estabelecerá uma conexão com o processo de destino.
Exemplos
Colete todos os contadores em um intervalo de atualização de 3 segundos e gere um csv como saída:
> dotnet-counters collect --process-id 1902 --refresh-interval 3 --format csv --counters is unspecified. Monitoring System.Runtime counters by default. Starting a counter session. Press Q to quit.Comece
dotnet mvc.dllcomo um processo filho e comece a coletar contadores de runtime e ASP.NET Core Contadores de hospedagem da inicialização e salve-os como uma saída JSON:> dotnet-counters collect --format json --counters System.Runtime,Microsoft.AspNetCore.Hosting -- dotnet mvc.dll Starting a counter session. Press Q to quit. File saved to counter.json
monitor de contadores dotnet
Exibe valores atualizados periodicamente de contadores selecionados.
Sinopse
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
Opções
-p|--process-id <PID>A ID do processo a ser monitorado.
-n|--name <name>O nome do processo a ser monitorado.
--diagnostic-portO nome da porta de diagnóstico a ser criada. Consulte Usar porta de diagnóstico para utilizar essa opção para iniciar o monitoramento de contadores da inicialização do aplicativo.
--refresh-interval <SECONDS>O número de segundos de atraso entre a atualização dos contadores exibidos
--counters <COUNTERS>Lista de contadores separados por vírgulas. Contadores podem ser especificados
provider_name[:counter_name]. Se oprovider_namefor usado sem uma lista qualificada de contadores, todos os contadores do provedor serão mostrados. Para descobrir nomes de provedor e contador, consulte métricas internas. Para EventCounters,provider_nameé o nome do EventSource e para Medidores,provider_nameé o nome do Medidor.-- <command>Após os parâmetros de configuração da coleção, você pode acrescentar
--seguido por um comando para iniciar um aplicativo .NET.dotnet-countersiniciará um processo com o comando fornecido e monitorará as métricas solicitadas. Isso geralmente é útil para coletar métricas para o caminho de inicialização do aplicativo e pode ser usado para diagnosticar ou monitorar problemas que ocorrem antes ou logo após o ponto de entrada principal.Observação
O uso dessa opção monitora o primeiro processo do .NET que se comunica de volta com a ferramenta, o que significa que, se o comando iniciar vários aplicativos .NET, ele coletará apenas o primeiro aplicativo. Portanto, é recomendável que você use essa opção em aplicativos autocontidos ou usando a opção
dotnet exec <app.dll>.Observação
A inicialização de um executável do .NET por meio
dotnet-countersde redirecionará sua entrada/saída e você não poderá interagir com seu stdin/stdout. Você pode sair da ferramenta por meio de Ctrl+C ou SIGTERM para encerrar com segurança a ferramenta e o processo filho. Se o processo filho for encerrado antes da ferramenta, a ferramenta também será encerrada. Se você precisar usar stdin/stdout, poderá usar a opção--diagnostic-port. Para obter mais informações, consulte Usando a porta de diagnóstico.
Observação
No Linux e no macOS, esse comando espera que o aplicativo de destino e dotnet-counters compartilhem a mesma variável de ambiente TMPDIR.
Observação
Para monitorar métricas usando dotnet-counters, ele precisa ser executado como o mesmo usuário que o usuário que executa o processo de destino ou como raiz.
Observação
Se você vir uma mensagem de erro semelhante à seguinte: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process., você está tentando usar dotnet-counters que tenha um bit incompatível com o processo de destino. Baixe o número de bit correto da ferramenta no link de instalação.
Exemplos
Monitore todos os contadores de
System.Runtimeem um intervalo de atualização de 3 segundos:> dotnet-counters monitor --process-id 1902 --refresh-interval 3 --counters System.Runtime Press p to pause, r to resume, q to quit. Status: Running Name Current Value [System.Runtime] dotnet.assembly.count ({assembly}) 115 dotnet.gc.collections ({collection}) gc.heap.generation ------------------ gen0 5 gen1 1 gen2 1 dotnet.gc.heap.total_allocated (By) 1.6947e+08 dotnet.gc.last_collection.heap.fragmentation.size (By) gc.heap.generation ------------------ gen0 0 gen1 348,248 gen2 0 loh 32 poh 0 dotnet.gc.last_collection.heap.size (By) gc.heap.generation ------------------ gen0 0 gen1 18,010,920 gen2 5,065,600 loh 98,384 poh 3,407,048 dotnet.gc.last_collection.memory.committed_size (By) 66,842,624 dotnet.gc.pause.time (s) 0.05 dotnet.jit.compilation.time (s) 1.317 dotnet.jit.compiled_il.size (By) 574,886 dotnet.jit.compiled_methods ({method}) 6,008 dotnet.monitor.lock_contentions ({contention}) 194 dotnet.process.cpu.count ({cpu}) 16 dotnet.process.cpu.time (s) cpu.mode -------- system 4.953 user 6.266 dotnet.process.memory.working_set (By) 1.3217e+08 dotnet.thread_pool.queue.length ({work_item}) 0 dotnet.thread_pool.thread.count ({thread}) 133 dotnet.thread_pool.work_item.count ({work_item}) 71,188 dotnet.timer.count ({timer}) 124Observação
Se o aplicativo usar o .NET versão 8 ou inferior, o Medidor System.Runtime não existirá nessas versões e
dotnet-countersretornará para exibir os EventCounters do System.Runtime mais antigos. A interface do usuário parece um pouco diferente, conforme mostrado aqui.[System.Runtime] % Time in GC since last GC (%) 0 Allocation Rate (B / 1 sec) 5,376 CPU Usage (%) 0 Exception Count (Count / 1 sec) 0 GC Fragmentation (%) 48.467 GC Heap Size (MB) 0 Gen 0 GC Count (Count / 1 sec) 1 Gen 0 Size (B) 24 Gen 1 GC Count (Count / 1 sec) 1 Gen 1 Size (B) 24 Gen 2 GC Count (Count / 1 sec) 1 Gen 2 Size (B) 272,000 IL Bytes Jitted (B) 19,449 LOH Size (B) 19,640 Monitor Lock Contention Count (Count / 1 sec) 0 Number of Active Timers 0 Number of Assemblies Loaded 7 Number of Methods Jitted 166 POH (Pinned Object Heap) Size (B) 24 ThreadPool Completed Work Item Count (Count / 1 sec) 0 ThreadPool Queue Length 0 ThreadPool Thread Count 2 Working Set (MB) 19Monitore apenas coletas de lixo e alocação de heap de coleta de lixo de
System.Runtime:> dotnet-counters monitor --process-id 1902 --counters System.Runtime[dotnet.gc.collections,dotnet.gc.heap.total_allocated] Press p to pause, r to resume, q to quit. Status: Running Name Current Value [System.Runtime] dotnet.gc.collections ({collection}) gc.heap.generation ------------------ gen0 0 gen1 0 gen2 0 dotnet.gc.heap.total_allocated (By) 9,943,384Monitorar valores
EventCounterdeEventSourcedefinidos pelo usuário. Para obter mais informações, consulte Tutorial: Medir o desempenho usando EventCounters no .NET Core.> dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal Press p to pause, r to resume, q to quit. request 100Inicie
my-aspnet-server.exee monitore o # de assemblies carregados desde sua inicialização:> dotnet-counters monitor --counters System.Runtime[dotnet.assembly.count] -- my-aspnet-server.exe Press p to pause, r to resume, q to quit. Status: Running Name Current Value [System.Runtime] dotnet.assembly.count ({assembly}) 11Inicie
my-aspnet-server.execomarg1earg2como argumentos de linha de comando e monitore seu conjunto de trabalho e tamanho de heap GC desde sua inicialização:> dotnet-counters monitor --counters System.Runtime[dotnet.process.memory.working_set,dotnet.gc.last_collection.heap.size] -- my-aspnet-server.exe arg1 arg2Name Current Value [System.Runtime] dotnet.gc.last_collection.heap.size (By) gc.heap.generation ------------------ gen0 560 gen1 462,720 gen2 0 loh 0 poh 8,184 dotnet.process.memory.working_set (By) 48,431,104
dotnet-counters ps
Lista os processos de dotnet que podem ser monitorados por dotnet-counters.
dotnet-counters A versão 6.0.320703 e posterior também exibe os argumentos de linha de comando com os quais cada processo foi iniciado, se disponível.
Sinopse
dotnet-counters ps [-h|--help]
Exemplo
Suponha que você inicie um aplicativo de longa execução usando o comando dotnet run --configuration Release. Em outra janela, execute o aplicativo de longa execução usando o comando dotnet-counters ps. A saída que você vê é a seguinte. Os argumentos de linha de comando, se houver, são mostrados no dotnet-counters versão 6.0.320703 e posterior.
> dotnet-counters ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Usar porta de diagnóstico
A porta de diagnóstico é um recurso de runtime que permite que você comece a monitorar ou coletar contadores da inicialização do aplicativo. Para fazer isso usando dotnet-counters, você pode usar dotnet-counters <collect|monitor> -- <command> conforme descrito nos exemplos anteriores ou usar a opção --diagnostic-port .
Usar dotnet-counters <collect|monitor> -- <command> para iniciar o aplicativo como um processo filho é a maneira mais simples de monitorá-lo rapidamente de sua inicialização.
No entanto, quando você quiser obter um controle mais fino sobre o tempo de vida do aplicativo que está sendo monitorado (por exemplo, monitore o aplicativo somente nos primeiros 10 minutos e continue executando) ou se você precisar interagir com o aplicativo usando a CLI, o uso da opção --diagnostic-port permite controlar o aplicativo de destino que está sendo monitorado e dotnet-counters.
O comando a seguir cria
dotnet-countersum soquete de diagnóstico chamadomyport.socke aguarda uma conexão.dotnet-counters collect --diagnostic-port myport.sockSaída:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sockEm um console separado, inicie o aplicativo de destino com a variável de ambiente
DOTNET_DiagnosticPortsdefinida como o valor na saídadotnet-counters.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2Isso permite
dotnet-countersiniciar a coleta de contadores emmy-dotnet-app:Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=myport.sock Starting a counter session. Press Q to quit.Importante
Iniciar seu aplicativo com
dotnet runpode ser problemático porque a CLI do dotnet pode gerar muitos processos filho que não são seu aplicativo e eles podem se conectar antesdotnet-countersdo seu aplicativo, deixando seu aplicativo para ser suspenso em runtime. É recomendável que você use diretamente uma versão independente do aplicativo ou usedotnet execpara iniciar o aplicativo.