Zkoumání čítačů výkonu (dotnet-counters)
Tento článek se vztahuje na: ✔️ dotnet-counters
verze 3.0.47001 a novější verze
Instalace
Existují dva způsoby stažení a instalace dotnet-counters
:
globální nástroj dotnet:
Pokud chcete nainstalovat nejnovější vydanou
dotnet-counters
verzi balíčku NuGet, použijte příkaz dotnet install:dotnet tool install --global dotnet-counters
Přímé stažení:
Stáhněte spustitelný soubor nástroje, který odpovídá vaší platformě:
Operační systém Platforma Windows x86 | x64 | Rameno | ARM-x64 Linux x64 | Rameno | Arm64 | musl-x64 | musl-Arm64
Poznámka
K použití dotnet-counters
v aplikaci x86 potřebujete odpovídající verzi nástroje x86.
Synopse
dotnet-counters [-h|--help] [--version] <command>
Description
dotnet-counters
je nástroj pro monitorování výkonu pro ad hoc monitorování stavu a šetření výkonu na první úrovni. Může sledovat hodnoty čítačů výkonu EventCounter publikované prostřednictvím rozhraní API nebo Meter rozhraní API. Můžete například rychle monitorovat věci, jako je využití procesoru nebo míra výjimek, které se v aplikaci .NET Core vyvolaly, abyste zjistili, jestli není něco podezřelého, než se ponoříte do vážnějšího šetření 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 |
dotnet-counters list |
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, ze který se mají shromažďovat data čítačů.
-n|--name <name>
Název procesu, ze který se mají shromažďovat data čítačů.
--diagnostic-port
Název portu diagnostiky, který chcete vytvořit. Informace o použití této možnosti ke spuštění čítačů monitorování od spuštění aplikace najdete v tématu Použití diagnostického portu .
--refresh-interval <SECONDS>
Počet sekund zpoždění mezi aktualizací zobrazených čítačů
--counters <COUNTERS>
Seznam čítačů oddělený čárkami. Lze zadat
provider_name[:counter_name]
čítače .provider_name
Pokud se používá bez opravňujícího seznamu čítačů, zobrazí se všechny čítače od poskytovatele. Pokud chcete zjistit názvy zprostředkovatelů a čítačů, použijte příkaz dotnet-counters list . Pro EventCountersprovider_name
je název EventSource a pro Měřičeprovider_name
je název měřiče.--format <csv|json>
Formát, který se má exportovat. Aktuálně dostupné: csv, json.
-o|--output <output>
Název výstupního souboru
-- <command>
(pouze pro cílové aplikace s .NET 5 nebo novějším)Po konfiguračních parametrech kolekce může uživatel připojit
--
a následně příkaz pro spuštění aplikace .NET s alespoň modulem runtime 5.0.dotnet-counters
spustí proces pomocí zadané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 dá se použít k diagnostice nebo monitorování problémů, ke kterým dochází v rané fázi před nebo krátce po hlavním vstupním bodu.Poznámka
Při použití této možnosti se monitoruje první proces .NET 5, který komunikuje zpět s nástrojem, což znamená, že pokud příkaz spustí více aplikací .NET, shromáždí pouze první aplikaci. Proto doporučujeme tuto možnost použít u samostatných aplikací nebo ji použít
dotnet exec <app.dll>
.Poznámka
Spuštění spustitelného souboru .NET prostřednictvím dotnet-counters způsobí přesměrování vstupu a výstupu a nebudete moct pracovat s jeho stdin/stdout. Ukončení nástroje pomocí kombinace kláves CTRL+C nebo SIGTERM bezpečně ukončí jak nástroj, tak podřízený proces. Pokud se podřízený proces ukončí před nástrojem, nástroj se také ukončí a trasování by mělo být bezpečně zobrazitelné. Pokud potřebujete použít stdin/stdout, můžete použít možnost
--diagnostic-port
. 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 TMPDIR
proměnnou prostředí. V opačném případě vyprší časový limit příkazu.
Poznámka
Pokud chcete shromažďovat metriky pomocí dotnet-counters
nástroje , musí být spuštěná jako stejný uživatel jako uživatel, který spouští cílový proces, nebo jako root. V opačném případě se nástroji nepodaří navázat spojení s cílovým procesem.
Příklady
Shromážděte všechny čítače v intervalu aktualizace 3 sekund a jako výstup vygenerujte csv:
> 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.
Spusťte
dotnet mvc.dll
jako podřízený proces a začněte shromažďovat čítače modulu runtime a ASP.NET Core čítače hostování 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
dotnet-counters list
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í, pokud jsou identifikovány procesy, které tyto čítače podporují, například když na hostitelském počítači běží ASP.NET Core aplikace.
dotnet-counters monitor
Zobrazí pravidelně aktualizované 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 portu diagnostiky, který chcete vytvořit. Informace o použití této možnosti ke spuštění čítačů monitorování od spuštění aplikace najdete v tématu Použití diagnostického portu .
--refresh-interval <SECONDS>
Počet sekund zpoždění mezi aktualizací zobrazených čítačů
--counters <COUNTERS>
Seznam čítačů oddělený čárkami. Lze zadat
provider_name[:counter_name]
čítače .provider_name
Pokud se používá bez opravňujícího seznamu čítačů, zobrazí se všechny čítače od poskytovatele. Pokud chcete zjistit názvy zprostředkovatelů a čítačů, použijte příkaz dotnet-counters list . Pro EventCountersprovider_name
je název EventSource a pro Měřičeprovider_name
je název měřiče.
-- <command>
(pouze pro cílové aplikace s .NET 5 nebo novějším)
Po konfiguračních parametrech kolekce může uživatel připojit --
a následně příkaz pro spuštění aplikace .NET s alespoň modulem runtime 5.0. dotnet-counters
spustí proces s poskytnutým příkazem a monitoruje požadované metriky. To je často užitečné ke shromažďování metrik pro spouštěcí cestu aplikace a dá se použít k diagnostice nebo monitorování problémů, ke kterým dochází v rané fázi před nebo krátce po hlavním vstupním bodu.
Poznámka
Při použití této možnosti se monitoruje první proces .NET 5, který komunikuje zpět s nástrojem, což znamená, že pokud příkaz spustí více aplikací .NET, shromáždí pouze první aplikaci. Proto doporučujeme tuto možnost použít u samostatných aplikací nebo ji použít dotnet exec <app.dll>
.
Poznámka
Spuštění spustitelného souboru .NET prostřednictvím dotnet-counters způsobí přesměrování vstupu a výstupu a nebudete moct pracovat s jeho stdin/stdout. Ukončení nástroje pomocí kombinace kláves CTRL+C nebo SIGTERM bezpečně ukončí jak nástroj, tak podřízený proces. Pokud se podřízený proces ukončí před nástrojem, nástroj se také ukončí. Pokud potřebujete použít stdin/stdout, můžete použít možnost --diagnostic-port
. 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 TMPDIR
proměnnou prostředí.
Poznámka
Pokud chcete monitorovat metriky pomocí dotnet-counters
nástroje , 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á následující: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.
, pokoušíte se použít dotnet-counters
bitovou neshodu s cílovým procesem. Ujistěte se, že jste si na instalačním odkazu stáhli správnou bitovou verzi nástroje.
Příklady
Monitorujte všechny čítače z
System.Runtime
v intervalu aktualizace 3 sekund:> 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
Monitorování pouze využití procesoru a velikosti haldy GC 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éEventSource
hodnoty Další informace najdete 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
Podívejte se na všechny dobře známé čítače, které jsou dostupné v
dotnet-counters
aplikacích .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
my-aspnet-server.exe
a monitorujte počet sestavení načtených po spuštění (pouze .NET 5 nebo novější):Důležité
To funguje jenom pro aplikace s .NET 5 nebo novějším.
> 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
sarg1
argumenty příkazového řádku aarg2
jako argumenty a monitorujte její pracovní sadu a velikost haldy GC od spuštění (pouze .NET 5 nebo novější):Důležité
To funguje jenom pro aplikace s .NET 5 nebo novějším.
> 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
Obsahuje seznam procesů dotnet, které lze monitorovat pomocí .dotnet-counters
dotnet-counters
verze 6.0.320703 a novější také zobrazují argumenty příkazového řádku, se kterými byl každý proces zahájen, pokud je 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ě spusťte dotnet-counters ps
příkaz . Výstup, který uvidíte, je následující. Případné argumenty příkazového řádku 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
Důležité
To funguje jenom pro aplikace s .NET 5 nebo novějším.
Diagnostický port je funkce modulu runtime přidaná v .NET 5, která umožňuje spustit monitorování nebo shromažďování čítačů při spuštění aplikace. Chcete-li to provést pomocí dotnet-counters
, můžete buď použít 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 jejího spuštění.
Pokud ale chcete získat jemnější kontrolu nad životností monitorované aplikace (například monitorovat aplikaci pouze prvních 10 minut a pokračovat v provádění) nebo pokud potřebujete s aplikací pracovat pomocí rozhraní příkazového řádku, pomocí možnosti můžete řídit jak cílovou aplikaci, která se monitoruje, --diagnostic-port
tak dotnet-counters
.
Následující příkaz vytvoří dotnet-counters diagnostický soket s názvem
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 pomocí
dotnet run
nástroje 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 kdotnet-counters
nim připojit před vaší aplikací, takže aplikace se za běhu pozastaví. Doporučujeme použít přímo samostatnou verzi aplikace nebo ji spustitdotnet exec
.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro