Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í tři způsoby, jak stáhnout a použít dotnet-counters:
Jednostřelové provedení (doporučeno):
Počínaje rozhraním .NET 10.0.100 můžete spustit
dotnet-countersbez trvalé instalace pomocídnx:dnx dotnet-counters [options]Například:
dnx dotnet-counters monitor --process-id 1234Tento přístup automaticky stáhne a spustí nejnovější verzi bez trvalé změny systému.
dotnet global tool (globální nástroj dotnet):
Pokud chcete nainstalovat nejnovější verzi
dotnet-countersbalíčku NuGet pro časté použití, použijte příkaz dotnet tool install :dotnet tool install --global dotnet-countersTento příkaz nainstaluje
dotnet-countersbinární soubor do cesty nástroje sady .NET SDK, kterou můžete přidat do cesty PATH a snadno vyvolat globálně nainstalované nástroje.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 EventCounterMeter 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
--versionZobrazí verzi
dotnet-countersnástroje.-h|--helpZobrazuje nápovědu k příkazovému řádku.
Příkazy
| Příkaz |
|---|
| dotnet-counters collect |
| 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čů.
Poznámka:
V Linuxu a macOS vyžaduje použití této možnosti cílovou aplikaci a
dotnet-counterssdílení stejnéTMPDIRproměnné prostředí. Jinak vyprší časový limit příkazu.-n|--name <name>Název procesu pro shromažďování dat čítačů.
Poznámka:
V Linuxu a macOS vyžaduje použití této možnosti cílovou aplikaci a
dotnet-counterssdílení stejnéTMPDIRproměnné prostředí. Jinak vyprší časový limit příkazu.--diagnostic-port <port-address[,(listen|connect)]>Nastaví diagnostický port používaný ke komunikaci s procesem, který se má monitorovat.
dotnet-countersa modul runtime .NET v rámci cílového procesu musí souhlasit s adresou portu a jedním nasloucháním a druhým připojením.dotnet-countersautomaticky určuje správný port při připojování pomocí--process-idmožností nebo--namepři spuštění procesu pomocí této-- <command>možnosti. Obvykle je nutné zadat port explicitně při čekání na proces, který se spustí v budoucnu, nebo komunikovat s procesem spuštěným v kontejneru, který není součástí oboru názvů aktuálního procesu.Liší se
port-addresspodle operačního systému:- Linux a macOS – cesta k soketu domény Unixu, například
/foo/tool1.socket. - Windows – cesta k pojmenované svislé sadě, například
\\.\pipe\my_diag_port1. - Android, iOS a tvOS – IP:port, například
127.0.0.1:9000.
Ve výchozím nastavení
dotnet-countersnaslouchá na zadané adrese. Místo toho můžete požádat odotnet-counterspřipojení připojením,connectza adresou. Připojí se například--diagnostic-port /foo/tool1.socket,connectk procesu modulu runtime .NET, který naslouchá soketu domény unixu/foo/tool1.socket.Informace o tom, jak tuto možnost použít ke spuštění čítačů monitorování při spuštění aplikace, najdete v tématu Použití diagnostického portu.
- Linux a macOS – cesta k soketu domény Unixu, například
--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_namePokud se použije bez opravňujícího seznamu čítačů, zobrazí se všechny čítače od poskytovatele. Pokud chcete zjistit názvy zprostředkovatelů a čítačů, podívejte se na předdefinované metriky. Pro EventCountersprovider_nameje název EventSource a pro měřiče,provider_nameje 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-countersspustí 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 lze 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:
Pokud spustíte spustitelný soubor .NET prostřednictvím
dotnet-counters, jeho vstup/výstup se přesměruje a nebudete moct pracovat s jeho stdin/stdout. Nástroj můžete ukončit pomocí Ctrl+C nebo SIGTERM a bezpečně ukončit 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-portmožnost. Další informace najdete v tématu Použití diagnostického portu.
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.dlljako 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
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-portNá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_namePokud se použije bez opravňujícího seznamu čítačů, zobrazí se všechny čítače od poskytovatele. Pokud chcete zjistit názvy zprostředkovatelů a čítačů, podívejte se na předdefinované metriky. Pro EventCountersprovider_nameje název EventSource a pro měřiče,provider_nameje název měřiče.-- <command>Po parametrech konfigurace kolekce můžete připojit a potom příkaz
--pro spuštění aplikace .NET.dotnet-countersspustí 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 lze 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řesměruje
dotnet-countersjeho vstup/výstup a nebudete moct pracovat s jeho stdin/stdout. Nástroj můžete ukončit pomocí Ctrl+C nebo SIGTERM a bezpečně ukončit 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-portmož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á 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 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.Runtimeintervalu 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 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}) 124Poznámka:
Pokud aplikace používá .NET verze 8 nebo nižší, měřič System.Runtime v těchto verzích neexistuje a
dotnet-countersvrátí se k zobrazení starších objektů EventCounters system.Runtime . Uživatelské rozhraní vypadá trochu jinak, jak je znázorněno tady.[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) 19Monitorujte pouze uvolňování paměti a přidělení haldy uvolňování paměti z
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,384Monitorování
EventCounterhodnot 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 100Spusťte a sledujte
my-aspnet-server.exepočet sestavení načtených z jeho spuštění:> 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}) 11Spusťte
my-aspnet-server.exepříkazový řádek aarg1arg2jako argumenty příkazového řádku a sledujte jeho pracovní sadu a velikost haldy GC od spuštění:> 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
Zobrazí seznam procesů dotnet, které lze monitorovat dotnet-counterspomocí .
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ý vidí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-countersmůžete použít buď použití dotnet-counters <collect|monitor> -- <command> , jak je popsáno v předchozích příkladech, 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-counterscílovou aplikaci, tak i .
Následující příkaz vytvoří
dotnet-countersdiagnostický soket s názvemmyport.socka počká na připojení.dotnet-counters collect --diagnostic-port myport.sockVýstup:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sockV samostatné konzole spusťte cílovou aplikaci s proměnnou
DOTNET_DiagnosticPortsprostředí nastavenou na hodnotu ve výstupudotnet-counters.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2To umožňuje
dotnet-counterszačít shromažďovat čítače promy-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 runmůž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-counterspřed vaší aplikací a nechat aplikaci pozastavenou za běhu. Doporučujeme přímo použít samostatnou verzi aplikace nebo ji spustitdotnet exec.