Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
Installer
Il existe trois façons de télécharger et d’utiliser dotnet-counters:
Exécution ponctuelle (recommandé) :
À compter de .NET 10.0.100, vous pouvez exécuter
dotnet-counterssans installation permanente à l’aidednxde :dnx dotnet-counters [options]Par exemple:
dnx dotnet-counters monitor --process-id 1234Cette approche télécharge et exécute automatiquement la dernière version sans modifier définitivement votre système.
outil global dotnet :
Pour installer la dernière version de version du
dotnet-counterspackage NuGet pour une utilisation fréquente, utilisez la commande d’installation de l’outil dotnet :dotnet tool install --global dotnet-countersCette commande installe un
dotnet-countersfichier binaire sur votre chemin d’accès aux outils du SDK .NET, que vous pouvez ajouter à votre chemin d’accès pour appeler facilement les outils installés globalement.Téléchargement direct :
Téléchargez l’exécutable de l’outil qui correspond à votre plateforme :
Système d''exploitation Plateforme Windows x86 | x64 | Bras | Arm-x64 Linux x64 | Bras | Arm64 | musl-x64 | musl-Arm64
Notes
Pour utiliser dotnet-counters sur une application x86, vous avez besoin d’une version x86 correspondante de l’outil.
Synopsis
dotnet-counters [-h|--help] [--version] <command>
Description
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.
Options
--versionAffiche la version de l’utilitaire
dotnet-counters.-h|--helpAffiche l’aide en ligne de commande.
Commandes
| Commande |
|---|
| dotnet-counters collecte |
| Moniteur dotnet-counters |
| dotnet-counters ps |
dotnet-counters collecte
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.
Synopsis
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
Options
-p|--process-id <PID>Identifiant du processus à partir duquel collecter des données de compteur.
Notes
Sur Linux et macOS, l’utilisation de cette option nécessite l’application cible et
dotnet-counterspartage la mêmeTMPDIRvariable d’environnement. Dans le cas contraire, la commande expire.-n|--name <name>Nom du processus à partir duquel collecter des données de compteur.
Notes
Sur Linux et macOS, l’utilisation de cette option nécessite l’application cible et
dotnet-counterspartage la mêmeTMPDIRvariable d’environnement. Dans le cas contraire, la commande expire.--diagnostic-port <port-address[,(listen|connect)]>Définit le port de diagnostic utilisé pour communiquer avec le processus à surveiller.
dotnet-counterset le runtime .NET à l’intérieur du processus cible doivent s’entendre sur l’adresse de port, avec une écoute et l’autre connexion.dotnet-countersdétermine automatiquement le port approprié lors de l’attachement à l’aide des--process-idoptions ou--namedes options, ou lors du lancement d’un processus à l’aide de l’option-- <command>. Il est généralement nécessaire de spécifier explicitement le port lors de l’attente d’un processus qui démarre à l’avenir ou communique avec un processus qui s’exécute à l’intérieur d’un conteneur qui ne fait pas partie de l’espace de noms de processus actuel.Le
port-addresssystème d’exploitation diffère :- Linux et macOS : chemin d’accès à un socket de domaine Unix tel que
/foo/tool1.socket. - Windows : chemin d’accès à un canal nommé tel que
\\.\pipe\my_diag_port1. - Android, iOS et tvOS - un port IP :port tel que
127.0.0.1:9000.
Par défaut,
dotnet-countersécoute à l’adresse spécifiée. Vous pouvez demanderdotnet-countersà se connecter à la place en ajoutant,connectaprès l’adresse. Par exemple,--diagnostic-port /foo/tool1.socket,connectvous connecterez à un processus de runtime .NET qui écoute le/foo/tool1.socketsocket de domaine Unix.Pour plus d’informations sur l’utilisation de cette option pour démarrer la surveillance des compteurs à partir du démarrage de l’application, consultez l’utilisation du port de diagnostic.
- Linux et macOS : chemin d’accès à un socket de domaine Unix tel que
--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]. Siprovider_nameest utilisé sans liste éligible de compteurs, tous les compteurs du fournisseur sont affichés. Pour découvrir les noms de fournisseurs et de compteurs, consultez les métriques intégrées. Pour EventCounters,provider_nameil s’agit du nom de l’EventSource et du compteur.provider_name--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-counterslance un processus avec la commande fournie et collecte les métriques demandées. Cela est souvent 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 tôt 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
Si vous lancez un exécutable .NET via
dotnet-counters, son entrée/sortie sera redirigé et vous ne pourrez pas interagir avec son stdin/stdout. Vous pouvez quitter l’outil via Ctrl+C ou SIGTERM pour mettre 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
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.
Exemples
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.dllen 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
Moniteur dotnet-counters
Affiche régulièrement les valeurs d’actualisation des compteurs sélectionnés.
Synopsis
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
Options
-p|--process-id <PID>Identifiant du processus à surveiller.
-n|--name <name>Nom du processus à surveiller.
--diagnostic-portNom 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]. Siprovider_nameest utilisé sans liste éligible de compteurs, tous les compteurs du fournisseur sont affichés. Pour découvrir les noms de fournisseurs et de compteurs, consultez les métriques intégrées. Pour EventCounters,provider_nameil s’agit du nom de l’EventSource et du compteur.provider_name-- <command>Après les paramètres de configuration de collection, vous pouvez ajouter
--une commande pour démarrer une application .NET.dotnet-counterslance un processus avec la commande fournie et surveille les métriques demandées. Cela est souvent 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 tôt 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-countersredirigera son entrée/sortie et vous ne pourrez pas interagir avec son stdin/stdout. Vous pouvez quitter l’outil via Ctrl+C ou SIGTERM pour mettre 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.
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 suivant : [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process., vous essayez d’utiliser dotnet-counters ce qui a une incompatibilité de bit par rapport au processus cible. Veillez à télécharger le nombre de bits correct de l’outil dans le lien d’installation.
Exemples
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 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}) 124Notes
Si l’application utilise .NET version 8 ou inférieure, le compteur System.Runtime n’existe pas dans ces versions et
dotnet-countersrevient à afficher les anciens EventCounters System.Runtime à la place. L’interface utilisateur semble légèrement différente, comme illustré ici.[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) 19Surveillez simplement les garbage collections et l’allocation de tas de garbage collection à partir 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,384Surveillez les valeurs
EventCounterdesEventSourcedé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 100Lancez
my-aspnet-server.exeet surveillez le nombre d’assemblys chargés à partir de son démarrage :> 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}) 11Lancez
my-aspnet-server.exeavecarg1etarg2en 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[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
Répertorie les processus dotnet qui peuvent être surveillés par dotnet-counters.
dotnet-counters La version 6.0.320703 et ultérieure affiche également les arguments de ligne de commande que chaque processus a démarré, le cas échéant.
Synopsis
dotnet-counters ps [-h|--help]
Exemple
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 voyez 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
Utilisation du port de diagnostic
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 dotnet-countersfaire, vous pouvez utiliser dotnet-counters <collect|monitor> -- <command> comme décrit dans les exemples précédents ou 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 suivante crée
dotnet-countersun socket de diagnostic nommémyport.socket attend une connexion.dotnet-counters collect --diagnostic-port myport.sockSortie :
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sockDans une console distincte, lancez l’application cible avec la variable d’environnement
DOTNET_DiagnosticPortsdéfinie sur la valeur dans la sortiedotnet-counters.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2Cela permet
dotnet-countersde commencer à collecter des compteurs surmy-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.Important
Le lancement de votre application peut
dotnet runposer problème, car l’interface CLI dotnet peut générer de nombreux processus enfants qui ne sont pas votre application et auxquels elles peuvent se connecterdotnet-countersavant votre application, laissant votre application suspendue au moment de l’exécution. Il est recommandé d’utiliser directement une version autonome de l’application oudotnet execde lancer l’application.