Untersuchen von Leistungsindikatoren (dotnet-counters)
Dieser Artikel bezieht sich auf: ✔️ dotnet-counters
Version 3.0.47001 und höhere Versionen.
Leistungsindikatoren können aus Anwendungen mit .NET 5 oder höher gelesen werden.
Installieren
Es gibt zwei Möglichkeiten, dotnet-counters
herunterzuladen und zu installieren:
Globales dotnet-Tool:
Verwenden Sie zum Installieren der neuesten Releaseversion des NuGet-Pakets
dotnet-counters
den Befehl dotnet tool install:dotnet tool install --global dotnet-counters
Direkter Download:
Laden Sie die ausführbare Datei für das Tool herunter, die Ihrer Plattform entspricht:
OS Plattform Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Hinweis
Sie benötigen eine entsprechende x86-Version des Tools, um dotnet-counters
für eine x86-App verwenden zu können.
Übersicht
dotnet-counters [-h|--help] [--version] <command>
Beschreibung
dotnet-counters
ist ein Leistungsüberwachungstool zur Ad-hoc-Überwachung der Integrität und zur Leistungsuntersuchung auf erster Ebene. Es kann Leistungsindikatorwerte überwachen, die über die API EventCounter oder Meter veröffentlicht werden. Beispielsweise können Sie schnell die CPU-Auslastung oder die Rate der ausgelösten Ausnahmen in Ihrer .NET Core-Anwendung überwachen, um nach verdächtigen Werten zu suchen, bevor Sie mit PerfView
oder dotnet-trace
eine umfassendere Leistungsuntersuchung durchführen.
Optionen
--version
Zeigt die Version des Hilfsprogramms dotnet-counters an.
-h|--help
Zeigt die Hilfe für die Befehlszeile an.
Befehle
Befehl |
---|
dotnet-counters collect |
dotnet-counters list |
dotnet-counters monitor |
dotnet-counters ps |
dotnet-counters collect
Mit diesem Befehl werden regelmäßig counter-Werte gesammelt und zur Nachbearbeitung in das festgelegte Dateiformat exportiert.
Übersicht
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
Optionen
-p|--process-id <PID>
Die ID des Prozesses, dessen Leistungsindikatordaten erfasst werden sollen.
-n|--name <name>
Der Name des Prozesses, dessen Leistungsindikatordaten erfasst werden sollen.
--diagnostic-port
Hierbei handelt es sich um den Namen des zu erstellenden Diagnoseports. Informationen zur Verwendung dieser Option, um die Überwachung von Leistungsindikatoren beim Start der App zu starten, finden Sie unter Verwenden von Diagnoseports.
--refresh-interval <SECONDS>
Die Anzahl von Sekunden, die zwischen Aktualisierungen der angezeigten Indikatoren verstreichen soll.
--counters <COUNTERS>
Eine durch Leerzeichen getrennte Liste von Indikatoren. Zähler können in der Form
provider_name[:counter_name]
angegeben werden. Wennprovider_name
ohne eine qualifizierende Liste von Indikatoren verwendet wird, werden alle Indikatoren des Anbieters angezeigt. Verwenden Sie zum Ermitteln von Anbieter- und Indikatornamen den Befehl dotnet-counters list. Für EventCounters istprovider_name
der Name von EventSource, und für Meters istprovider_name
der Name der Verbrauchseinheit.--format <csv|json>
Das zu exportierende Format Derzeit sind die folgenden Formate verfügbar: CSV und JSON.
-o|--output <output>
Der Name der Ausgabedatei.
-- <command>
Nach den Konfigurationsparametern der Sammlung kann der Benutzer gefolgt von einem Befehl zum Starten einer .NET-Anwendung anhängen
--
.dotnet-counters
startet einen Prozess mit dem angegebenen Befehl und erfasst die angeforderten Metriken. Dies ist bei der Sammlung der Metriken für den Startpfad einer Anwendung oft nützlich und kann verwendet werden, um Probleme kurz vor oder nach dem Haupteinstiegspunkt zu diagnostizieren oder zu überwachen.Hinweis
Wenn Sie diese Option verwenden, wird der erste .NET-Prozess überwacht, der mit dem Tool kommuniziert. Wenn Der Befehl mehrere .NET-Anwendungen startet, erfasst er nur die erste App. Sie sollten daher diese Option für eigenständige Anwendungen oder die Option
dotnet exec <app.dll>
verwenden.Hinweis
Durch das Starten einer ausführbaren .NET-Datei über dotnet-counters wird die Eingabe/Ausgabe umgeleitet, und Sie können nicht mit seinem Stdin/Stdout interagieren. Wenn Sie das Tool über STRG+C oder SIGTERM beenden, werden sowohl das Tool als auch der untergeordnete Prozess sicher beendet. Wenn der untergeordnete Prozess vor dem Tool beendet wird, wird das Tool ebenfalls beendet. Wenn Sie „stdin/stdout“ verwenden müssen, können Sie die Option
--diagnostic-port
verwenden. Weitere Informationen finden Sie unter Verwenden von Diagnoseports.
Hinweis
Unter Linux und macOS erwartet dieser Befehl, dass die Zielanwendung und dotnet-counters
die gleiche TMPDIR
-Umgebungsvariable verwenden. Andernfalls führt der Befehl zu einem Timeout.
Hinweis
Wenn Sie mit dotnet-counters
Metriken erfassen möchten, muss der Befehl vom Rootbenutzer oder dem Benutzer ausgeführt werden, der den Zielprozess ausführt. Andernfalls kann das Tool keine Verbindung mit dem Zielprozess herstellen.
Beispiele
Im folgenden Beispiel werden alle counter-Werte mit einem Aktualisierungsintervall von 3 Sekunden erfasst und eine CSV-Ausgabedatei wird erstellt:
> 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.
Starten Sie
dotnet mvc.dll
als untergeordneten Prozess, und beginnen Sie von Anfang an mit der Erfassung von Runtimeindikatoren und ASP.NET Core-Hostingindikatoren. Speichern Sie sie als JSON-Ausgabe:> 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
dotnet-counters list
Zeigt eine Liste von Zählernamen und -beschreibungen gruppiert nach Anbieter an.
Übersicht
dotnet-counters list [-h|--help]
Beispiel
> 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
Hinweis
Die Microsoft.AspNetCore.Hosting
-Leistungsindikatoren werden angezeigt, wenn bestimmte Prozesse identifiziert werden, die diese Leistungsindikatoren unterstützen, etwa wenn eine ASP.NET Core-Anwendung auf dem Hostcomputer ausgeführt wird.
dotnet-counters monitor
Zeigt regelmäßig aktualisierte Werte ausgewählter Zähler an.
Übersicht
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
Optionen
-p|--process-id <PID>
Die ID des zu überwachenden Prozesses.
-n|--name <name>
Dies ist der Name des Prozesses, der überwacht werden soll.
--diagnostic-port
Hierbei handelt es sich um den Namen des zu erstellenden Diagnoseports. Informationen zur Verwendung dieser Option, um die Überwachung von Leistungsindikatoren beim Start der App zu starten, finden Sie unter Verwenden von Diagnoseports.
--refresh-interval <SECONDS>
Die Anzahl von Sekunden, die zwischen Aktualisierungen der angezeigten Indikatoren verstreichen soll.
--counters <COUNTERS>
Eine durch Leerzeichen getrennte Liste von Indikatoren. Zähler können in der Form
provider_name[:counter_name]
angegeben werden. Wennprovider_name
ohne eine qualifizierende Liste von Indikatoren verwendet wird, werden alle Indikatoren des Anbieters angezeigt. Verwenden Sie zum Ermitteln von Anbieter- und Indikatornamen den Befehl dotnet-counters list. Für EventCounters istprovider_name
der Name von EventSource, und für Meters istprovider_name
der Name der Verbrauchseinheit.
-- <command>
Nach den Konfigurationsparametern der Sammlung kann der Benutzer gefolgt von einem Befehl zum Starten einer .NET-Anwendung anhängen --
. dotnet-counters
startet einen Prozess mit dem bereitgestellten Befehl und überwacht die angeforderten Metriken. Dies ist bei der Sammlung der Metriken für den Startpfad einer Anwendung oft nützlich und kann verwendet werden, um Probleme kurz vor oder nach dem Haupteinstiegspunkt zu diagnostizieren oder zu überwachen.
Hinweis
Wenn Sie diese Option verwenden, wird der erste .NET-Prozess überwacht, der mit dem Tool kommuniziert. Wenn Der Befehl mehrere .NET-Anwendungen startet, erfasst er nur die erste App. Sie sollten daher diese Option für eigenständige Anwendungen oder die Option dotnet exec <app.dll>
verwenden.
Hinweis
Durch das Starten einer ausführbaren .NET-Datei über dotnet-counters wird die Eingabe/Ausgabe umgeleitet, und Sie können nicht mit seinem Stdin/Stdout interagieren. Wenn Sie das Tool über STRG+C oder SIGTERM beenden, werden sowohl das Tool als auch der untergeordnete Prozess sicher beendet. Wenn der untergeordnete Prozess vor dem Tool beendet wird, wird das Tool ebenfalls beendet. Wenn Sie „stdin/stdout“ verwenden müssen, können Sie die Option --diagnostic-port
verwenden. Weitere Informationen finden Sie unter Verwenden von Diagnoseports.
Hinweis
Unter Linux und macOS erwartet dieser Befehl, dass die Zielanwendung und dotnet-counters
die gleiche TMPDIR
-Umgebungsvariable verwenden.
Hinweis
Wenn Sie mit dotnet-counters
Metriken überwachen möchten, muss der Befehl vom Rootbenutzer oder dem Benutzer ausgeführt werden, der den Zielprozess ausführt.
Hinweis
Wenn eine Fehlermeldung wie die folgende angezeigt wird: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.
, versuchen Sie dotnet-counters
mit nicht übereinstimmender Bitanzahl für den Zielprozess zu verwenden. Stellen Sie sicher, dass Sie die richtige Bitanzahl des Tools im Link für die Installation herunterladen.
Beispiele
Überwachen aller Zähler von
System.Runtime
in einem Aktualisierungsintervall von 3 Sekunden:> 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
Überwachen nur der CPU-Auslastung und der GC-Heapgröße von
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
Überwachen von
EventCounter
-Werten von benutzerdefiniertenEventSource
. Weitere Informationen finden Sie unter Tutorial: Messen der Leistung mithilfe von EventCounters in .NET Core.> dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal Press p to pause, r to resume, q to quit. request 100
Anzeigen aller bekannten Zähler, die in
dotnet-counters
verfügbar sind:> 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
Anzeigen aller bekannten Zähler, die in
dotnet-counters
für .NET 5-Apps verfügbar sind:> 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
Starten und überwachen Sie
my-aspnet-server.exe
die Anzahl der Assemblys, die vom Start geladen wurden:> 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
Starten Sie
my-aspnet-server.exe
mitarg1
undarg2
als Befehlszeilenargumente, und überwachen Sie ihre Arbeitssatz- und GC-Heapgröße vom Start:> 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
dotnet-counters ps
Listet die dotnet-Prozesse auf, die von dotnet-counters
überwacht werden können.
Ab dotnet-counters
-Version 6.0.320703 werden auch die Befehlszeilenargumente angezeigt, mit denen jeder Prozess gestartet wurde, sofern verfügbar.
Übersicht
dotnet-counters ps [-h|--help]
Beispiel
Angenommen, Sie starten eine zeitintensive App mit dem Befehl dotnet run --configuration Release
. In einem anderen Fenster führen Sie den Befehl dotnet-counters ps
aus. Die Ausgabe sieht wie folgt aus. Sofern vorhanden, werden die Befehlszeilenargumente ab dotnet-counters
-Version 6.0.320703 angezeigt.
> dotnet-counters ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Verwenden des Diagnoseports
Der Diagnoseport ist ein Laufzeitfeature, mit dem Sie die Überwachung starten oder Leistungsindikatoren vom App-Start sammeln können. Dies können Sie mit dotnet-counters
einrichten, indem Sie dotnet-counters <collect|monitor> -- <command>
wie in den Beispielen oben oder die Option --diagnostic-port
verwenden.
Die Verwendung von dotnet-counters <collect|monitor> -- <command>
zum Starten der Anwendung als untergeordneter Prozess ist die einfachste Möglichkeit, schnell mit der Überwachung ab dem Start zu beginnen.
Wenn Sie allerdings präzisere Kontrolle über die Lebensdauer der überwachten App wünschen (z. B., damit die App nur in den ersten 10 Minuten überwacht und dann weiterhin ausgeführt wird) oder mithilfe der CLI mit der App interagieren müssen, können Sie die Option --diagnostic-port
verwenden, um sowohl die überwachte Ziel-App als auch dotnet-counters
zu steuern.
Der folgende Befehl sorgt dafür, dass „dotnet-counters“ einen Diagnosesocket namens
myport.sock
erstellt und auf eine Verbindung wartet.dotnet-counters collect --diagnostic-port myport.sock
Ausgabe:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
Starten Sie die Zielanwendung in einer separaten Konsole mit der Umgebungsvariable
DOTNET_DiagnosticPorts
, die Sie auf den Wert in derdotnet-counters
-Ausgabe festlegen.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2
Dadurch sollte
dotnet-counters
damit beginnen, Leistungsindikatoren vonmy-dotnet-app
zu erfassen: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.
Wichtig
Das Starten Ihrer App mit
dotnet run
kann sich als problematisch erweisen, da die .NET-CLI viele untergeordnete Prozesse erzeugen kann, bei denen es sich nicht um Ihre App handelt. Diese können vor Ihrer App eine Verbindung mitdotnet-counters
herstellen, wodurch Ihre App zur Laufzeit angehalten wird. Es wird empfohlen, dass Sie direkt eine eigenständige Version der App oderdotnet exec
verwenden, um die Anwendung zu starten.