Zkoumání čítačů výkonu (čítače dotnet)
Tento článek se vztahuje na: ✔️ dotnet-counters
verze 3.0.47001 a novější verze.
Čítače je možné číst z aplikací, na kterých běží .NET 5 nebo novější.
Instalace
Existují dva způsoby, jak stáhnout a nainstalovat dotnet-counters
:
dotnet global tool:
Pokud chcete nainstalovat nejnovější verzi
dotnet-counters
balíčku NuGet, použijte příkaz dotnet tool install :dotnet tool install --global dotnet-counters
Přímé stahování:
Stáhněte spustitelný soubor nástroje, který odpovídá vaší platformě:
Operační systém Platforma Windows x86 | x64 | Arm | arm-x64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Poznámka:
Pokud chcete použít dotnet-counters
v aplikaci x86, potřebujete odpovídající verzi nástroje x86.
Synopse
dotnet-counters [-h|--help] [--version] <command>
Popis
dotnet-counters
je nástroj pro monitorování výkonu pro monitorování stavu ad hoc a prošetření výkonu na první úrovni. Může sledovat hodnoty čítače výkonu EventCounter Meter publikované prostřednictvím rozhraní API nebo rozhraní API. Můžete například rychle monitorovat například využití procesoru nebo míru výjimek, které se v aplikaci .NET Core vyvolává, a zjistit, jestli je něco podezřelého, než se ponoříte do vážnějšího vyšetřování výkonu pomocí PerfView
nebo dotnet-trace
.
Možnosti
--version
Zobrazí verzi nástroje dotnet-counters.
-h|--help
Zobrazuje nápovědu k příkazovému řádku.
Příkazy
Příkaz |
---|
dotnet-counters collect |
seznam čítačů dotnet-counters |
dotnet-counters monitor |
dotnet-counters ps |
dotnet-counters collect
Pravidelně shromážděte vybrané hodnoty čítačů a exportujte je do zadaného formátu souboru pro následné zpracování.
Synopse
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
Možnosti
-p|--process-id <PID>
ID procesu pro shromažďování dat čítačů.
-n|--name <name>
Název procesu pro shromažďování dat čítačů.
--diagnostic-port
Název diagnostického portu, který se má vytvořit. Informace o použití této možnosti ke spuštění čítačů monitorování od spuštění aplikace najdete na diagnostickém portu .
--refresh-interval <SECONDS>
Počet sekund zpoždění mezi aktualizací zobrazených čítačů
--counters <COUNTERS>
Čárkami oddělený seznam čítačů. Lze zadat
provider_name[:counter_name]
čítače .provider_name
Pokud se použije bez opravňujícího seznamu čítačů, zobrazí se všechny čítače od poskytovatele. Ke zjišťování názvů zprostředkovatelů a čítačů použijte příkaz dotnet-counters list . Pro EventCountersprovider_name
je název EventSource a pro měřiče,provider_name
je název měřiče.--format <csv|json>
Formát, který se má exportovat. Aktuálně k dispozici: csv, json.
-o|--output <output>
Název výstupního souboru
-- <command>
Po parametrech konfigurace kolekce může uživatel připojit
--
následovaný příkazem pro spuštění aplikace .NET.dotnet-counters
spustí proces pomocí poskytnutého příkazu a shromáždí požadované metriky. To je často užitečné ke shromažďování metrik pro spouštěcí cestu aplikace a je možné je použít k diagnostice nebo monitorování problémů, ke kterým dochází dříve nebo krátce po hlavním vstupním bodu.Poznámka:
Tato možnost monitoruje první proces .NET, který komunikuje zpět s nástrojem, což znamená, že pokud váš příkaz spustí více aplikací .NET, bude shromažďovat pouze první aplikaci. Proto se doporučuje tuto možnost použít u samostatných aplikací nebo použití této
dotnet exec <app.dll>
možnosti.Poznámka:
Spuštění spustitelného souboru .NET přes dotnet-counters přesměruje svůj vstup/výstup a nebudete moct pracovat s jeho stdin/stdout. Ukončení nástroje pomocí kombinace kláves CTRL+C nebo SIGTERM bezpečně ukončí nástroj i podřízený proces. Pokud se podřízený proces ukončí před nástrojem, nástroj se ukončí také. Pokud potřebujete použít stdin/stdout, můžete použít tuto
--diagnostic-port
možnost. Další informace najdete v tématu Použití diagnostického portu .
Poznámka:
V Linuxu a macOS tento příkaz očekává cílovou aplikaci a dotnet-counters
bude sdílet stejnou proměnnou TMPDIR
prostředí. Jinak vyprší časový limit příkazu.
Poznámka:
Aby bylo možné shromažďovat metriky pomocí dotnet-counters
, musí být spuštěn jako stejný uživatel jako uživatel, který spouští cílový proces nebo jako kořen. Jinak se nástroj nepodaří navázat spojení s cílovým procesem.
Příklady
Shromážděte všechny čítače v intervalu aktualizace 3 sekundy a vygenerujte jako výstup sdílený svazek clusteru:
> 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.
Začněte
dotnet mvc.dll
jako podřízený proces a začněte shromažďovat čítače modulu runtime a ASP.NET čítače hostování jádra od spuštění a uložte ho jako výstup 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
seznam čítačů dotnet-counters
Zobrazí seznam názvů a popisů čítačů seskupených podle poskytovatele.
Synopse
dotnet-counters list [-h|--help]
Příklad
> 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
Poznámka:
Microsoft.AspNetCore.Hosting
Čítače se zobrazí, když jsou zjištěny procesy, které podporují tyto čítače, například při spuštění aplikace ASP.NET Core na hostitelském počítači.
dotnet-counters monitor
Zobrazuje pravidelně obnovující hodnoty vybraných čítačů.
Synopse
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
Možnosti
-p|--process-id <PID>
ID procesu, který se má monitorovat.
-n|--name <name>
Název procesu, který se má monitorovat.
--diagnostic-port
Název diagnostického portu, který se má vytvořit. Informace o použití této možnosti ke spuštění čítačů monitorování od spuštění aplikace najdete na diagnostickém portu .
--refresh-interval <SECONDS>
Počet sekund zpoždění mezi aktualizací zobrazených čítačů
--counters <COUNTERS>
Čárkami oddělený seznam čítačů. Lze zadat
provider_name[:counter_name]
čítače .provider_name
Pokud se použije bez opravňujícího seznamu čítačů, zobrazí se všechny čítače od poskytovatele. Ke zjišťování názvů zprostředkovatelů a čítačů použijte příkaz dotnet-counters list . Pro EventCountersprovider_name
je název EventSource a pro měřiče,provider_name
je název měřiče.
-- <command>
Po parametrech konfigurace kolekce může uživatel připojit --
následovaný příkazem pro spuštění aplikace .NET. dotnet-counters
spustí proces pomocí poskytnutého příkazu a bude monitorovat požadované metriky. To je často užitečné ke shromažďování metrik pro spouštěcí cestu aplikace a je možné je použít k diagnostice nebo monitorování problémů, ke kterým dochází dříve nebo krátce po hlavním vstupním bodu.
Poznámka:
Tato možnost monitoruje první proces .NET, který komunikuje zpět s nástrojem, což znamená, že pokud váš příkaz spustí více aplikací .NET, bude shromažďovat pouze první aplikaci. Proto se doporučuje tuto možnost použít u samostatných aplikací nebo použití této dotnet exec <app.dll>
možnosti.
Poznámka:
Spuštění spustitelného souboru .NET přes dotnet-counters přesměruje svůj vstup/výstup a nebudete moct pracovat s jeho stdin/stdout. Ukončení nástroje pomocí kombinace kláves CTRL+C nebo SIGTERM bezpečně ukončí nástroj i podřízený proces. Pokud se podřízený proces ukončí před nástrojem, nástroj se ukončí také. Pokud potřebujete použít stdin/stdout, můžete použít tuto --diagnostic-port
možnost. Další informace najdete v tématu Použití diagnostického portu .
Poznámka:
V Linuxu a macOS tento příkaz očekává cílovou aplikaci a dotnet-counters
bude sdílet stejnou proměnnou TMPDIR
prostředí.
Poznámka:
Pokud chcete monitorovat metriky pomocí dotnet-counters
, musí být spuštěn jako stejný uživatel jako uživatel, který spouští cílový proces nebo jako root.
Poznámka:
Pokud se zobrazí chybová zpráva podobná této: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.
pokoušíte se použít dotnet-counters
neshodu bitů s cílovým procesem. Nezapomeňte stáhnout správnou bitovou verzi nástroje na instalačním odkazu.
Příklady
Monitorujte všechny čítače v
System.Runtime
intervalu aktualizace 3 sekundy:> 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
Monitorujte pouze využití procesoru a velikost haldy uvolňování paměti z
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
Monitorování
EventCounter
hodnot z uživatelem definovanéhoEventSource
. Další informace naleznete v tématu Kurz: Měření výkonu pomocí EventCounters v .NET Core.> dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal Press p to pause, r to resume, q to quit. request 100
Zobrazit všechny dobře známé čítače, které jsou k dispozici v
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
Zobrazit všechny dobře známé čítače, které jsou dostupné pro
dotnet-counters
aplikace .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
Spusťte a sledujte
my-aspnet-server.exe
počet sestavení načtených z jeho spuštění:> 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
Spusťte
my-aspnet-server.exe
příkazový řádek aarg1
arg2
jako argumenty příkazového řádku a sledujte jeho pracovní sadu a velikost haldy GC od spuštění:> 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
Zobrazí seznam procesů dotnet, které lze monitorovat dotnet-counters
pomocí .
dotnet-counters
verze 6.0.320703 a novější také zobrazí argumenty příkazového řádku, se kterými byly jednotlivé procesy spuštěny, pokud jsou k dispozici.
Synopse
dotnet-counters ps [-h|--help]
Příklad
Předpokládejme, že spustíte dlouhotrvající aplikaci pomocí příkazu dotnet run --configuration Release
. V jiném okně spustíte dotnet-counters ps
příkaz. Výstup, který uvidíte, je následující. Argumenty příkazového řádku( pokud existují) se zobrazují ve dotnet-counters
verzi 6.0.320703 a novější.
> dotnet-counters ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Použití diagnostického portu
Diagnostický port je funkce modulu runtime, která umožňuje spustit monitorování nebo shromažďování čítačů od spuštění aplikace. K tomu dotnet-counters
můžete použít buď použití dotnet-counters <collect|monitor> -- <command>
, jak je popsáno v příkladech výše, nebo použít --diagnostic-port
možnost.
Použití dotnet-counters <collect|monitor> -- <command>
ke spuštění aplikace jako podřízeného procesu je nejjednodušší způsob, jak ji rychle monitorovat od spuštění.
Pokud ale chcete získat přehlednější kontrolu nad životností monitorované aplikace (například monitorujte aplikaci pouze po dobu prvních 10 minut a pokračujte v provádění) nebo pokud potřebujete s aplikací pracovat pomocí rozhraní příkazového řádku, můžete pomocí --diagnostic-port
možnosti řídit jak monitorovanou dotnet-counters
cílovou aplikaci, tak i .
Následující příkaz vytvoří dotnet-counters pojmenovaný diagnostický soket
myport.sock
a čeká na připojení.dotnet-counters collect --diagnostic-port myport.sock
Výstup:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
V samostatné konzole spusťte cílovou aplikaci s proměnnou
DOTNET_DiagnosticPorts
prostředí nastavenou na hodnotu ve výstupudotnet-counters
.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2
To by pak mělo umožnit
dotnet-counters
začít shromažďovat čítače namy-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.
Důležité
Spuštění aplikace
dotnet run
pomocí aplikace může být problematické, protože rozhraní příkazového řádku dotnet může vytvořit mnoho podřízených procesů, které nejsou vaší aplikací, a můžou se připojitdotnet-counters
před aplikací a nechat aplikaci pozastavenou za běhu. Doporučujeme přímo použít samostatnou verzi aplikace nebo ji spustitdotnet exec
.