Eventos
Compilación de Intelligent Apps
17 mar, 23 - 21 mar, 23
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Regístrese ahoraEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Este artículo se aplica a: ✔️ dotnet-counters
versión 3.0.47001 y versiones posteriores.
Los contadores se pueden leer desde aplicaciones que ejecutan .NET 5 o posterior.
Hay dos maneras de descargar e instalar dotnet-counters
:
Herramienta global dotnet:
Para instalar la versión de lanzamiento más reciente del paquete NuGet de dotnet-counters
, use el comando dotnet tool install:
dotnet tool install --global dotnet-counters
Descarga directa:
descargue el archivo ejecutable de la herramienta que coincida con la plataforma:
Nota
Para usar dotnet-counters
en una aplicación x86, necesita la versión x86 correspondiente de la herramienta.
dotnet-counters [-h|--help] [--version] <command>
dotnet-counters
es una herramienta de supervisión de rendimiento diseñada para la investigación del rendimiento y la supervisión del estado de primer nivel ad hoc. Puede observar los valores del contador de rendimiento que se publican a través de la API EventCounter o la API Meter. Por ejemplo, se pueden supervisar rápidamente cosas como el uso de la CPU o la velocidad de las excepciones que se producen en la aplicación .NET Core para ver si hay algo sospechoso antes de profundizar en una investigación de rendimiento más seria mediante PerfView
o dotnet-trace
.
--version
Muestra la versión de la utilidad dotnet-counters.
-h|--help
Muestra la ayuda de la línea de comandos.
Recopila periódicamente los valores de contador seleccionados y los exporta a un formato de archivo especificado para su posterior procesamiento.
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
-p|--process-id <PID>
Id. del proceso del que se van a recopilar datos de contador.
-n|--name <name>
Nombre del proceso del que se van a recopilar datos de contador.
--diagnostic-port
Nombre del puerto de diagnóstico que se va a crear. Vea Uso del puerto de diagnóstico para saber cómo usar esta opción a fin de iniciar los contadores de supervisión desde el inicio de la aplicación.
--refresh-interval <SECONDS>
Número de segundos de retraso entre la actualización de los contadores mostrados.
--counters <COUNTERS>
Una lista de contadores separados por comas. Los contadores pueden ser provider_name[:counter_name]
especificados. Si se usa provider_name
sin una lista de contadores que cumplan los requisitos, se mostrarán todos los contadores del proveedor. Para descubrir los nombres del proveedor y del contador, use el comando dotnet-counters list. Para EventCounters, provider_name
es el nombre de EventSource y para Meters, provider_name
es el nombre del medidor.
--format <csv|json>
Formato que se va a exportar. Actualmente disponibles: csv, json.
-o|--output <output>
Nombre del archivo de salida.
-- <command>
Después de los parámetros de configuración de la colección, el usuario puede anexar --
seguido de un comando para iniciar una aplicación .NET. dotnet-counters
iniciará un proceso con el comando proporcionado y recopilará las métricas solicitadas. Esto suele ser útil para recopilar métricas de la ruta de acceso de inicio de la aplicación y se puede usar para diagnosticar o supervisar los problemas que se producen antes o poco después del punto de entrada principal.
Nota
Con esta opción se supervisa el primer proceso de .NET que se comunica de nuevo con la herramienta, lo que significa que si el comando inicia varias aplicaciones .NET, solo recopilará la primera aplicación. Por tanto, se recomienda usar esta opción en aplicaciones independientes, o bien utilizar la opción dotnet exec <app.dll>
.
Nota
El inicio de un ejecutable de .NET a través de dotnet-counters redirigirá su entrada y salida y no podrá interactuar con su stdin/stdout. La salida de la herramienta por medio de Ctrl + C o SIGTERM finalizará con seguridad la herramienta y el proceso secundario. Si el proceso secundario termina antes que la herramienta, esta también se cerrará. Si necesita usar stdin/stdout, puede usar la opción --diagnostic-port
. Para obtener más información, vea Uso del puerto de diagnóstico.
Nota
En Linux y macOS, este comando espera que la aplicación de destino y dotnet-counters
compartan la misma variable de entorno TMPDIR
. De lo contrario, se agotará el tiempo de espera del comando.
Nota
Para recopilar métricas mediante dotnet-counters
, debe ejecutarse como el mismo usuario que el que ejecuta el proceso de destino, o bien como usuario raíz. De lo contrario, la herramienta no podrá establecer una conexión con el proceso de destino.
Recopilación de todos los contadores en un intervalo de actualización de tres segundos y generación de un archivo CSV como salida:
> 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.
Inicie dotnet mvc.dll
como un proceso secundario y comience a recopilar contadores de tiempo de ejecución y contadores de hospedaje de ASP.NET Core del inicio, y guárdelo como una salida 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
Muestra una lista de nombres y descripciones de contador, agrupada por proveedor.
dotnet-counters list [-h|--help]
> dotnet-counters list
Showing well-known counters only. Specific processes may support additional counters.
System.Runtime
cpu-usage Amount of time the process has utilized the CPU (ms)
working-set Amount of working set used by the process (MB)
gc-heap-size Total heap size reported by the GC (MB)
gen-0-gc-count Number of Gen 0 GCs per interval
gen-1-gc-count Number of Gen 1 GCs per interval
gen-2-gc-count Number of Gen 2 GCs per interval
time-in-gc % time in GC since the last GC
gen-0-size Gen 0 Heap Size
gen-1-size Gen 1 Heap Size
gen-2-size Gen 2 Heap Size
loh-size LOH Heap Size
alloc-rate Allocation Rate
assembly-count Number of Assemblies Loaded
exception-count Number of Exceptions per interval
threadpool-thread-count Number of ThreadPool Threads
monitor-lock-contention-count Monitor Lock Contention Count
threadpool-queue-length ThreadPool Work Items Queue Length
threadpool-completed-items-count ThreadPool Completed Work Items Count
active-timer-count Active Timers Count
Microsoft.AspNetCore.Hosting
requests-per-second Request rate
total-requests Total number of requests
current-requests Current number of requests
failed-requests Failed number of requests
Nota
Los contadores de Microsoft.AspNetCore.Hosting
se muestran cuando hay procesos identificados que admiten estos contadores, por ejemplo, cuando una aplicación ASP.NET Core se está ejecutando en el equipo host.
Muestra la actualización periódica de los valores de los contadores seleccionados.
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
-p|--process-id <PID>
Id. del proceso que se va a supervisar.
-n|--name <name>
Nombre del proceso que se va a supervisar.
--diagnostic-port
Nombre del puerto de diagnóstico que se va a crear. Vea Uso del puerto de diagnóstico para saber cómo usar esta opción a fin de iniciar los contadores de supervisión desde el inicio de la aplicación.
--refresh-interval <SECONDS>
Número de segundos de retraso entre la actualización de los contadores mostrados.
--counters <COUNTERS>
Una lista de contadores separados por comas. Los contadores pueden ser provider_name[:counter_name]
especificados. Si se usa provider_name
sin una lista de contadores que cumplan los requisitos, se mostrarán todos los contadores del proveedor. Para descubrir los nombres del proveedor y del contador, use el comando dotnet-counters list. Para EventCounters, provider_name
es el nombre de EventSource y para Meters, provider_name
es el nombre del medidor.
-- <command>
Después de los parámetros de configuración de la colección, el usuario puede anexar --
seguido de un comando para iniciar una aplicación .NET. dotnet-counters
iniciará un proceso con el comando proporcionado y supervisará las métricas solicitadas. Esto suele ser útil para recopilar métricas de la ruta de acceso de inicio de la aplicación y se puede usar para diagnosticar o supervisar los problemas que se producen antes o poco después del punto de entrada principal.
Nota
Con esta opción se supervisa el primer proceso de .NET que se comunica de nuevo con la herramienta, lo que significa que si el comando inicia varias aplicaciones .NET, solo recopilará la primera aplicación. Por tanto, se recomienda usar esta opción en aplicaciones independientes, o bien utilizar la opción dotnet exec <app.dll>
.
Nota
El inicio de un ejecutable de .NET a través de dotnet-counters redirigirá su entrada y salida y no podrá interactuar con su stdin/stdout. La salida de la herramienta por medio de Ctrl + C o SIGTERM finalizará con seguridad la herramienta y el proceso secundario. Si el proceso secundario termina antes que la herramienta, esta también se cerrará. Si necesita usar stdin/stdout, puede usar la opción --diagnostic-port
. Para obtener más información, vea Uso del puerto de diagnóstico.
Nota
En Linux y macOS, este comando espera que la aplicación de destino y dotnet-counters
compartan la misma variable de entorno TMPDIR
.
Nota
Para supervisar métricas mediante dotnet-counters
, debe ejecutarse como el mismo usuario que el que ejecuta el proceso de destino, o bien como usuario raíz.
Nota
Si ve un mensaje de error similar al siguiente: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.
, está intentando usar dotnet-counters
que tiene un valor de bits no coincidente con el proceso de destino. Asegúrese de descargar el valor de bits correcto de la herramienta en el vínculo de instalación.
Supervisión de todos los contadores de System.Runtime
con un intervalo de actualización 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
[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) 19
Supervisión de únicamente el uso de la CPU y el tamaño del montón de GC de System.Runtime
:
> dotnet-counters monitor --process-id 1902 --counters System.Runtime[cpu-usage,gc-heap-size]
Press p to pause, r to resume, q to quit.
Status: Running
[System.Runtime]
CPU Usage (%) 24
GC Heap Size (MB) 811
Supervisión de los valores EventCounter
del elemento EventSource
definido por el usuario. Para obtener más información, consulte Tutorial: Medición del rendimiento mediante EventCounters en .NET Core.
> dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal
Press p to pause, r to resume, q to quit.
request 100
Vea todos los contadores conocidos que están disponibles en dotnet-counters
:
> dotnet-counters list
Showing well-known counters for .NET (Core) version 3.1 only. Specific processes may support additional counters.
System.Runtime
cpu-usage The percent of process' CPU usage relative to all of the system CPU resources [0-100]
working-set Amount of working set used by the process (MB)
gc-heap-size Total heap size reported by the GC (MB)
gen-0-gc-count Number of Gen 0 GCs between update intervals
gen-1-gc-count Number of Gen 1 GCs between update intervals
gen-2-gc-count Number of Gen 2 GCs between update intervals
time-in-gc % time in GC since the last GC
gen-0-size Gen 0 Heap Size
gen-1-size Gen 1 Heap Size
gen-2-size Gen 2 Heap Size
loh-size LOH Size
alloc-rate Number of bytes allocated in the managed heap between update intervals
assembly-count Number of Assemblies Loaded
exception-count Number of Exceptions / sec
threadpool-thread-count Number of ThreadPool Threads
monitor-lock-contention-count Number of times there were contention when trying to take the monitor lock between update intervals
threadpool-queue-length ThreadPool Work Items Queue Length
threadpool-completed-items-count ThreadPool Completed Work Items Count
active-timer-count Number of timers that are currently active
Microsoft.AspNetCore.Hosting
requests-per-second Number of requests between update intervals
total-requests Total number of requests
current-requests Current number of requests
failed-requests Failed number of requests
Vea todos los contadores conocidos que están disponibles en dotnet-counters
para aplicaciones de .NET 5:
> dotnet-counters list --runtime-version 5.0
Showing well-known counters for .NET (Core) version 5.0 only. Specific processes may support additional counters.
System.Runtime
cpu-usage The percent of process' CPU usage relative to all of the system CPU resources [0-100]
working-set Amount of working set used by the process (MB)
gc-heap-size Total heap size reported by the GC (MB)
gen-0-gc-count Number of Gen 0 GCs between update intervals
gen-1-gc-count Number of Gen 1 GCs between update intervals
gen-2-gc-count Number of Gen 2 GCs between update intervals
time-in-gc % time in GC since the last GC
gen-0-size Gen 0 Heap Size
gen-1-size Gen 1 Heap Size
gen-2-size Gen 2 Heap Size
loh-size LOH Size
poh-size POH (Pinned Object Heap) Size
alloc-rate Number of bytes allocated in the managed heap between update intervals
gc-fragmentation GC Heap Fragmentation
assembly-count Number of Assemblies Loaded
exception-count Number of Exceptions / sec
threadpool-thread-count Number of ThreadPool Threads
monitor-lock-contention-count Number of times there were contention when trying to take the monitor lock between update intervals
threadpool-queue-length ThreadPool Work Items Queue Length
threadpool-completed-items-count ThreadPool Completed Work Items Count
active-timer-count Number of timers that are currently active
il-bytes-jitted Total IL bytes jitted
methods-jitted-count Number of methods jitted
Microsoft.AspNetCore.Hosting
requests-per-second Number of requests between update intervals
total-requests Total number of requests
current-requests Current number of requests
failed-requests Failed number of requests
Microsoft-AspNetCore-Server-Kestrel
connections-per-second Number of connections between update intervals
total-connections Total Connections
tls-handshakes-per-second Number of TLS Handshakes made between update intervals
total-tls-handshakes Total number of TLS handshakes made
current-tls-handshakes Number of currently active TLS handshakes
failed-tls-handshakes Total number of failed TLS handshakes
current-connections Number of current connections
connection-queue-length Length of Kestrel Connection Queue
request-queue-length Length total HTTP request queue
System.Net.Http
requests-started Total Requests Started
requests-started-rate Number of Requests Started between update intervals
requests-aborted Total Requests Aborted
requests-aborted-rate Number of Requests Aborted between update intervals
current-requests Current Requests
Inicie my-aspnet-server.exe
y supervise el número de ensamblados cargados desde su inicio:
> dotnet-counters monitor --counters System.Runtime[assembly-count] -- my-aspnet-server.exe
Press p to pause, r to resume, q to quit.
Status: Running
[System.Runtime]
Number of Assemblies Loaded 24
Inicie my-aspnet-server.exe
con arg1
y arg2
como argumentos de línea de comandos y supervise su tamaño de montón de GC y conjunto de trabajo desde su inicio:
> dotnet-counters monitor --counters System.Runtime[working-set,gc-heap-size] -- my-aspnet-server.exe arg1 arg2
Press p to pause, r to resume, q to quit.
Status: Running
[System.Runtime]
GC Heap Size (MB) 39
Working Set (MB) 59
Enumera los procesos dotnet que dotnet-counters
puede supervisar.
dotnet-counters
versión 6.0.320703 y posteriores también muestran los argumentos de la línea de comandos con los que se ha iniciado cada proceso, si están disponibles.
dotnet-counters ps [-h|--help]
Imagine que inicia una aplicación de ejecución prolongada con el comando dotnet run --configuration Release
. En otra ventana ejecuta el comando dotnet-counters ps
. La salida que se ve es la siguiente. Los argumentos de la línea de comandos, si los hay, se muestran en dotnet-counters
versión 6.0.320703 y posteriores.
> dotnet-counters ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
El puerto de diagnóstico es una característica en tiempo de ejecución que permite empezar a supervisar o recopilar contadores desde el inicio de la aplicación. Para hacer esto con dotnet-counters
, puede usar dotnet-counters <collect|monitor> -- <command>
, tal como se describe en los ejemplos anteriores, o bien la opción --diagnostic-port
.
El uso de dotnet-counters <collect|monitor> -- <command>
para iniciar la aplicación como un proceso secundario es la manera más sencilla de realizar una supervisión rápida desde el inicio.
Sin embargo, si quiere obtener un control más preciso sobre la vigencia de la aplicación supervisada (por ejemplo, supervisar la aplicación solo durante los primeros 10 minutos y continuar la ejecución), o si necesita interactuar con la aplicación mediante la CLI, el uso de la opción --diagnostic-port
le permite controlar la aplicación de destino que se supervisa y dotnet-counters
.
El comando siguiente hace que dotnet-counters cree un socket de diagnóstico denominado myport.sock
y que espere a una conexión.
CLI de .NET
dotnet-counters collect --diagnostic-port myport.sock
Salida:
OutputWaiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
En una consola independiente, inicie la aplicación de destino con la variable de entorno DOTNET_DiagnosticPorts
establecida en el valor de la salida de dotnet-counters
.
Consolaexport DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2
Esto debe habilitar dotnet-counters
para empezar a recopilar contadores en my-dotnet-app
:
OutputWaiting 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 la aplicación con dotnet run
puede resultar problemático porque la CLI de dotnet puede generar muchos procesos secundarios que no sean de la aplicación. Además, dichos procesos pueden conectarse a dotnet-counters
antes que la aplicación, lo que causa que esta se suspenda en tiempo de ejecución. Se recomienda usar directamente una versión independiente de la aplicación o dotnet exec
para iniciar la aplicación.
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Eventos
Compilación de Intelligent Apps
17 mar, 23 - 21 mar, 23
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Regístrese ahora