Événements
Créer des applications intelligentes
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
Cet article s’applique à : ✔️ dotnet-counters
version 3.0.47001 et versions ultérieures.
Les compteurs peuvent être lus à partir d’applications exécutant .NET 5 ou version ultérieure.
Il existe deux façons de télécharger et d’installer dotnet-counters
:
outil global dotnet :
Pour installer la dernière version de version du dotnet-counters
package NuGet, utilisez la commande installation de l’outil dotnet :
dotnet tool install --global dotnet-counters
Téléchargement direct :
Téléchargez l’exécutable de l’outil qui correspond à votre plateforme :
Notes
Pour utiliser dotnet-counters
sur une application x86, vous avez besoin d’une version x86 correspondante de l’outil.
dotnet-counters [-h|--help] [--version] <command>
dotnet-counters
est un outil de surveillance des performances pour l’analyse ad hoc de l’intégrité et l’examen des performances de premier niveau. Il peut observer les valeurs de compteur de performances publiées via l’API EventCounter ou l’API Meter. Par exemple, vous pouvez surveiller rapidement des éléments tels que l’utilisation du processeur ou le taux d’exceptions levées dans votre application .NET Core pour voir s’il y a quelque chose de suspect avant de plonger dans une enquête plus sérieuse sur les performances à l’aide PerfView
ou dotnet-trace
.
--version
Affiche la version de l’utilitaire dotnet-counters.
-h|--help
Affiche l’aide en ligne de commande.
Collectez régulièrement les valeurs de compteur sélectionnées et exportez-les dans un format de fichier spécifié pour le post-traitement.
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
-p|--process-id <PID>
Identifiant du processus à partir duquel collecter des données de compteur.
-n|--name <name>
Nom du processus à partir duquel collecter des données de compteur.
--diagnostic-port
Nom du port de diagnostic à créer. Consultez Utilisation du port de diagnostic pour savoir comment utiliser cette option pour démarrer la surveillance des compteurs à partir du démarrage de l’application.
--refresh-interval <SECONDS>
Nombre de secondes à retarder entre la mise à jour des compteurs affichés
--counters <COUNTERS>
Liste de compteurs séparés par des virgules. Les compteurs peuvent être spécifiés provider_name[:counter_name]
. Si provider_name
est utilisé sans liste éligible de compteurs, tous les compteurs du fournisseur sont affichés. Pour découvrir les noms de fournisseurs et de compteurs, utilisez la commande dotnet-counters list . Pour EventCounters, provider_name
est le nom de l’EventSource. provider_name
est le nom du compteur pour Meters.
--format <csv|json>
Format à exporter. Actuellement disponible : csv, json.
-o|--output <output>
Le nom du fichier de sortie.
-- <command>
Après les paramètres de configuration de collection, l’utilisateur peut ajouter --
une commande pour démarrer une application .NET. dotnet-counters
lance un processus avec la commande fournie et collecte les métriques demandées. Cela peut être utile pour collecter des métriques pour le chemin d’accès de démarrage de l’application et peut être utilisé pour diagnostiquer ou surveiller les problèmes qui se produisent avant ou peu après le point d’entrée principal.
Notes
L’utilisation de cette option surveille le premier processus .NET qui communique à l’outil, ce qui signifie que si votre commande lance plusieurs applications .NET, elle collecte uniquement la première application. Par conséquent, il est recommandé d’utiliser cette option sur les applications autonomes ou d’utiliser l’option dotnet exec <app.dll>
.
Notes
Le lancement d’un exécutable .NET via dotnet-counters redirige ses entrées/sorties et vous ne pourrez pas interagir avec son stdin/stdout. La sortie de l’outil via CTRL+C ou SIGTERM met fin en toute sécurité à l’outil et au processus enfant. Si le processus enfant se termine avant l’outil, l’outil se ferme également. Si vous avez besoin d’utiliser stdin/stdout, vous pouvez utiliser l’option --diagnostic-port
. Pour plus d’informations, consultez Utilisation du port de diagnostic.
Notes
Sous Linux et macOS, cette commande s’attend à ce que l’application cible et dotnet-counters
partagent la même variable d’environnement TMPDIR
. Dans le cas contraire, la commande expire.
Notes
Pour collecter des métriques en utilisant dotnet-counters
, il faut l’exécuter en tant qu’utilisateur exécutant le processus cible ou en tant que racine. Sinon, l’outil ne parvient pas à établir une connexion avec le processus cible.
Collectez tous les compteurs à un intervalle d’actualisation de 3 secondes et générez un csv en tant que sortie :
> 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.
Démarrez dotnet mvc.dll
en tant que processus enfant et commencez à collecter des compteurs d’exécution et des compteurs hébergement ASP.NET Core à partir du démarrage et enregistrez-le en tant que sortie 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
Affiche une liste de noms de compteurs et de descriptions, regroupées par fournisseur.
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
Notes
Les compteurs Microsoft.AspNetCore.Hosting
s’affichent lorsqu’il existe des processus identifiés qui prennent en charge ces compteurs, par exemple ; lorsqu’une application ASP.NET Core s’exécute sur l’ordinateur hôte.
Affiche régulièrement les valeurs d’actualisation des compteurs sélectionnés.
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
-p|--process-id <PID>
Identifiant du processus à surveiller.
-n|--name <name>
Nom du processus à surveiller.
--diagnostic-port
Nom du port de diagnostic à créer. Consultez Utilisation du port de diagnostic pour savoir comment utiliser cette option pour démarrer la surveillance des compteurs à partir du démarrage de l’application.
--refresh-interval <SECONDS>
Nombre de secondes à retarder entre la mise à jour des compteurs affichés
--counters <COUNTERS>
Liste de compteurs séparés par des virgules. Les compteurs peuvent être spécifiés provider_name[:counter_name]
. Si provider_name
est utilisé sans liste éligible de compteurs, tous les compteurs du fournisseur sont affichés. Pour découvrir les noms de fournisseurs et de compteurs, utilisez la commande dotnet-counters list . Pour EventCounters, provider_name
est le nom de l’EventSource. provider_name
est le nom du compteur pour Meters.
-- <command>
Après les paramètres de configuration de collection, l’utilisateur peut ajouter --
une commande pour démarrer une application .NET. dotnet-counters
lance un processus avec la commande fournie et surveille les métriques demandées. Cela peut être utile pour collecter des métriques pour le chemin d’accès de démarrage de l’application et peut être utilisé pour diagnostiquer ou surveiller les problèmes qui se produisent avant ou peu après le point d’entrée principal.
Notes
L’utilisation de cette option surveille le premier processus .NET qui communique à l’outil, ce qui signifie que si votre commande lance plusieurs applications .NET, elle collecte uniquement la première application. Par conséquent, il est recommandé d’utiliser cette option sur les applications autonomes ou d’utiliser l’option dotnet exec <app.dll>
.
Notes
Le lancement d’un exécutable .NET via dotnet-counters redirige ses entrées/sorties et vous ne pourrez pas interagir avec son stdin/stdout. La sortie de l’outil via CTRL+C ou SIGTERM met fin en toute sécurité à l’outil et au processus enfant. Si le processus enfant se termine avant l’outil, l’outil se ferme également. Si vous avez besoin d’utiliser stdin/stdout, vous pouvez utiliser l’option --diagnostic-port
. Pour plus d’informations, consultez Utilisation du port de diagnostic.
Notes
Sur Linux et macOS, cette commande s’attend à ce que l’application cible et dotnet-counters
partagent la même variable d’environnement TMPDIR
.
Notes
Pour surveiller les métriques à l’aide de dotnet-counters
, il faut l’exécuter en tant qu’utilisateur exécutant le processus cible ou en tant que racine.
Notes
Si vous voyez un message d’erreur similaire à celui-ci : [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.
, vous essayez d’utiliser dotnet-counters
qui a une incompatibilité de bits par rapport au processus cible. Veillez à télécharger le nombre de bits correct de l’outil dans le lien d’installation.
Surveillez tous les compteurs à partir de System.Runtime
à un intervalle d’actualisation de 3 secondes :
> 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
Surveillez simplement l’utilisation du processeur et la taille du tas GC à partir 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
Surveillez les valeurs EventCounter
des EventSource
définis par l’utilisateur. Pour plus d’informations, consultez Tutoriel : Mesurer les performances à l’aide d’EventCounters dans .NET Core.
> dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal
Press p to pause, r to resume, q to quit.
request 100
Affichez tous les compteurs connus disponibles dans 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
Affichez tous les compteurs connus disponibles dans dotnet-counters
pour les applications .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
Lancez my-aspnet-server.exe
et surveillez le nombre d’assemblys chargés à partir de son démarrage :
> 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
Lancez my-aspnet-server.exe
avec arg1
et arg2
en tant qu’arguments de ligne de commande et surveillez son jeu de travail et sa taille de tas GC à partir de son démarrage :
> 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
Répertorie les processus dotnet qui peuvent être surveillés par dotnet-counters
.
dotnet-counters
version 6.0.320703 et ultérieures, affichez également les arguments de ligne de commande que chaque processus a démarré, le cas échéant.
dotnet-counters ps [-h|--help]
Supposons que vous démarriez une application de longue durée à l’aide de la commande dotnet run --configuration Release
. Dans une autre fenêtre, vous exécutez la commande dotnet-counters ps
. La sortie que vous verrez est la suivante. Les arguments de ligne de commande, le cas échéant, sont affichés dans dotnet-counters
version 6.0.320703 et ultérieures.
> dotnet-counters ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Le port de diagnostic est une fonctionnalité d’exécution qui vous permet de démarrer la surveillance ou de collecter des compteurs à partir du démarrage de l’application. Pour ce faire, vous pouvez utiliser dotnet-counters
, soit utiliser dotnet-counters <collect|monitor> -- <command>
comme décrit dans les exemples ci-dessus, soit utiliser l’option --diagnostic-port
.
L’utilisation de dotnet-counters <collect|monitor> -- <command>
pour lancer l’application en tant que processus enfant est le moyen le plus simple de le surveiller rapidement à partir de son démarrage.
Toutefois, lorsque vous souhaitez obtenir un contrôle plus fin sur la durée de vie de l’application surveillée (par exemple, surveiller l’application pendant les 10 premières minutes uniquement et continuer à s’exécuter) ou si vous devez interagir avec l’application à l’aide de l’interface CLI, l’option --diagnostic-port
vous permet de contrôler à la fois l’application cible en cours d’analyse et dotnet-counters
.
La commande ci-dessous fait créer un socket de diagnostic nommé myport.sock
par dotnet-counters et attend une connexion.
CLI .NET
dotnet-counters collect --diagnostic-port myport.sock
Sortie :
OutputWaiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
Dans une console distincte, lancez l’application cible avec la variable d’environnement DOTNET_DiagnosticPorts
définie sur la valeur dans la sortie dotnet-counters
.
Consoleexport DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2
Cela doit ensuite permettre dotnet-counters
de commencer à collecter des compteurs sur 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.
Important
Le lancement de votre application avec dotnet run
peut poser problème, car l’interface CLI dotnet peut générer de nombreux processus enfants qui ne sont pas votre application. Ils peuvent se connecter à dotnet-counters
avant votre application, laissant votre application suspendue au moment de l’exécution. Il est recommandé d’utiliser directement une version autonome de l’application ou d’utiliser dotnet exec
pour lancer l’application.
Commentaires sur .NET
.NET est un projet open source. Sélectionnez un lien pour fournir des commentaires :
Événements
Créer des applications intelligentes
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenant