Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 drei Möglichkeiten zum Herunterladen und Verwenden dotnet-counters:
Einschussausführung (empfohlen):
Ab .NET 10.0.100 können Sie ohne dauerhafte Installation ausführen
dotnet-countersdnx:dnx dotnet-counters [options]Beispiel:
dnx dotnet-counters monitor --process-id 1234Dieser Ansatz lädt automatisch die neueste Version herunter und führt sie aus, ohne ihr System dauerhaft zu ändern.
Globales dotnet-Tool:
Um die neueste Version des
dotnet-countersfür die häufige Verwendung zu installieren, verwenden Sie den Befehl zum Installieren des dotnet-Tools:dotnet tool install --global dotnet-countersDieser Befehl installiert eine
dotnet-countersBinärdatei in Ihrem .NET SDK Tools-Pfad, den Sie Ihrem PATH hinzufügen können, um global installierte Tools auf einfache Weise aufzurufen.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
--versionZeigt die Version des
dotnet-countersHilfsprogramms an.-h|--helpZeigt die Hilfe für die Befehlszeile an.
Befehle
| Befehl |
|---|
| dotnet-counters collect |
| 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.
Hinweis
Unter Linux und macOS erfordert die Verwendung dieser Option die Zielanwendung und
dotnet-countersdie gleicheTMPDIRUmgebungsvariable. Andernfalls führt der Befehl zu einem Timeout.-n|--name <name>Der Name des Prozesses, dessen Leistungsindikatordaten erfasst werden sollen.
Hinweis
Unter Linux und macOS erfordert die Verwendung dieser Option die Zielanwendung und
dotnet-countersdie gleicheTMPDIRUmgebungsvariable. Andernfalls führt der Befehl zu einem Timeout.--diagnostic-port <port-address[,(listen|connect)]>Legt den Diagnoseport fest, der für die Kommunikation mit dem zu überwachenden Prozess verwendet wird.
dotnet-countersund die .NET-Laufzeit innerhalb des Zielprozesses muss sich auf die Portadresse einigen, wobei eine Überwachung und die andere Verbindung erfolgt.dotnet-countersBestimmt automatisch den richtigen Port beim Anfügen mit den--process-idOptionen oder--namebeim Starten eines Prozesses mithilfe der-- <command>Option. Es ist in der Regel nur erforderlich, den Port explizit anzugeben, wenn auf einen Prozess gewartet wird, der in Zukunft gestartet wird, oder eine Kommunikation mit einem Prozess, der in einem Container ausgeführt wird, der nicht Teil des aktuellen Prozessnamespaces ist.Die
port-addressUnterschiede unterscheiden sich vom Betriebssystem:- Linux und macOS - ein Pfad zu einem Unix-Domänensocket wie
/foo/tool1.socket. - Windows – ein Pfad zu einer benannten Pipe, z
\\.\pipe\my_diag_port1. B. . - Android, iOS und tvOS – ein IP:Port wie
127.0.0.1:9000.
Lauscht standardmäßig
dotnet-countersan der angegebenen Adresse. Sie könnendotnet-countersstattdessen eine Verbindung anfordern, indem Sie nach der Adresse anhängen,connect. Stellt beispielsweise eine Verbindung mit einem .NET-Laufzeitprozess her,--diagnostic-port /foo/tool1.socket,connectder auf den/foo/tool1.socketUnix-Domänensocket lauscht.Informationen zur Verwendung dieser Option zum Starten von Überwachungsindikatoren vom App-Start finden Sie unter Verwendung des Diagnoseports.
- Linux und macOS - ein Pfad zu einem Unix-Domänensocket wie
--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_nameohne eine qualifizierende Liste von Indikatoren verwendet wird, werden alle Indikatoren des Anbieters angezeigt. Informationen zum Ermitteln von Anbieter- und Leistungsindikatorennamen finden Sie unter integrierten Metriken. Für EventCountersprovider_nameist der Name der EventSource und für Meterprovider_nameder Name des Zählers.--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-countersStartet einen Prozess mit dem bereitgestellten Befehl und sammelt die angeforderten Metriken. Dies ist häufig hilfreich, um Metriken für den Startpfad der Anwendung zu sammeln und kann verwendet werden, um Probleme zu diagnostizieren oder zu überwachen, die früh vor oder kurz nach dem Haupteinstiegspunkt auftreten.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. Daher wird empfohlen, diese Option für eigenständige Anwendungen oder die Verwendung der
dotnet exec <app.dll>Option zu verwenden.Hinweis
Wenn Sie eine .NET-ausführbare Datei über
dotnet-countersstarten, wird die Eingabe/Ausgabe umgeleitet, und Sie können nicht mit seinem Stdin/Stdout interagieren. Sie können das Tool über STRG+C oder SIGTERM beenden, um sowohl das Tool als auch den untergeordneten Prozess sicher zu beenden. 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-portverwenden. Weitere Informationen finden Sie unter Verwenden des Diagnoseports.
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.dllals 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 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-portHierbei 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_nameohne eine qualifizierende Liste von Indikatoren verwendet wird, werden alle Indikatoren des Anbieters angezeigt. Informationen zum Ermitteln von Anbieter- und Leistungsindikatorennamen finden Sie unter integrierten Metriken. Für EventCountersprovider_nameist der Name der EventSource und für Meterprovider_nameder Name des Zählers.-- <command>Nach den Konfigurationsparametern der Sammlung können Sie einen Befehl anfügen
--, um eine .NET-Anwendung zu starten.dotnet-countersstartet einen Prozess mit dem bereitgestellten Befehl und überwacht die angeforderten Metriken. Dies ist häufig hilfreich, um Metriken für den Startpfad der Anwendung zu sammeln und kann verwendet werden, um Probleme zu diagnostizieren oder zu überwachen, die früh vor oder kurz nach dem Haupteinstiegspunkt auftreten.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. Daher wird empfohlen, diese Option für eigenständige Anwendungen oder die Verwendung der
dotnet exec <app.dll>Option zu verwenden.Hinweis
Das Starten einer ausführbaren .NET-Datei
dotnet-countersüber leitet die Eingabe/Ausgabe um, und Sie können nicht mit seinem Stdin/Stdout interagieren. Sie können das Tool über STRG+C oder SIGTERM beenden, um sowohl das Tool als auch den untergeordneten Prozess sicher zu beenden. 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-portverwenden. Weitere Informationen finden Sie unter Verwenden des 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 ähnlich wie die folgende angezeigt wird: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process., versuchen Sie, dies mit nicht übereinstimmender Bitanzahl für den Zielprozess zu verwenden dotnet-counters . Stellen Sie sicher, dass Sie die richtige Bitanzahl des Tools im Link für die Installation herunterladen.
Beispiele
Überwachen aller Zähler von
System.Runtimein 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 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}) 124Hinweis
Wenn die App .NET Version 8 oder niedriger verwendet, ist der System.Runtime-Meter in diesen Versionen nicht vorhanden und
dotnet-countersgreift auf die Anzeige der älteren System.Runtime EventCounters zurück. Die Benutzeroberfläche sieht etwas anders aus, wie hier gezeigt.[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 Sie nur Garbage Collections und Garbage Collection Heap-Zuordnung von
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,384Ü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 100Starten und überwachen Sie
my-aspnet-server.exedie Anzahl der Assemblys, die vom Start geladen wurden:> 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}) 11Starten Sie
my-aspnet-server.exemitarg1undarg2als Befehlszeilenargumente, und überwachen Sie ihre Arbeitssatz- und GC-Heapgröße vom Start:> 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
Listet die dotnet-Prozesse auf, die von dotnet-counters überwacht werden können.
dotnet-counters Version 6.0.320703 und höher zeigt auch die Befehlszeilenargumente an, 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 angezeigte Ausgabe lautet wie folgt. 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.
dotnet-countersDazu können Sie entweder wie in den vorherigen Beispielen beschrieben oder dotnet-counters <collect|monitor> -- <command> die --diagnostic-port Option 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 erstellt
dotnet-counterseinen Diagnosesocket namensmyport.sockund wartet auf eine Verbindung.dotnet-counters collect --diagnostic-port myport.sockAusgabe:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sockStarten 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 arg2Auf diese Weise können
dotnet-countersSie mit dem Sammeln von Leistungsindikatoren beginnen aufmy-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.Wichtig
Das Starten Ihrer App mit
dotnet runkann problematisch sein, da die dotnet CLI möglicherweise viele untergeordnete Prozesse, die nicht Ihre App sind, und sie können vor der App eine Verbindung herstellendotnet-counters, sodass Ihre App zur Laufzeit angehalten wird. Es wird empfohlen, eine eigenständige Version der App direkt zu verwenden oderdotnet execdie Anwendung zu starten.