Badanie liczników wydajności (liczniki dotnet-counter)
Ten artykuł dotyczy wersji ✔️ dotnet-counters
3.0.47001 lub nowszej.
Liczniki można odczytywać z aplikacji z systemem .NET 5 lub nowszym.
Instalowanie
Istnieją dwa sposoby pobierania i instalowania dotnet-counters
programu :
dotnet global tool:
Aby zainstalować najnowszą wersję
dotnet-counters
pakietu NuGet, użyj polecenia dotnet tool install :dotnet tool install --global dotnet-counters
Pobieranie bezpośrednie:
Pobierz plik wykonywalny narzędzia pasujący do platformy:
System operacyjny Platforma Windows x86 | x64 | Arm | Arm-x64 Linux x64 Arm | Arm64 | | musl-x64 musl-Arm64 |
Uwaga
Aby korzystać z dotnet-counters
aplikacji x86, potrzebujesz odpowiedniej wersji narzędzia x86.
Streszczenie
dotnet-counters [-h|--help] [--version] <command>
opis
dotnet-counters
to narzędzie do monitorowania wydajności na potrzeby monitorowania kondycji ad hoc i badania wydajności pierwszego poziomu. Może obserwować wartości liczników wydajności publikowanych za pośrednictwem interfejsu EventCounter API lub interfejsu Meter API. Na przykład możesz szybko monitorować takie elementy jak użycie procesora CPU lub szybkość zgłaszania wyjątków w aplikacji .NET Core, aby sprawdzić, czy istnieje coś podejrzanego przed rozpoczęciem bardziej poważnego badania wydajności przy użyciu lub PerfView
dotnet-trace
.
Opcje
--version
Wyświetla wersję narzędzia dotnet-counters.
-h|--help
Pokazuje pomoc wiersza polecenia.
Polecenia
Polecenie |
---|
dotnet-counters collect |
dotnet-counters list |
dotnet-counters monitor |
dotnet-counters ps |
dotnet-counters collect
Okresowo zbieraj wybrane wartości liczników i eksportuj je do określonego formatu pliku na potrzeby przetwarzania końcowego.
Streszczenie
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
Opcje
-p|--process-id <PID>
Identyfikator procesu do zbierania danych licznika.
-n|--name <name>
Nazwa procesu zbierania danych licznika.
--diagnostic-port
Nazwa portu diagnostycznego do utworzenia. Zobacz używanie portu diagnostycznego, aby użyć tej opcji, aby rozpocząć monitorowanie liczników z uruchamiania aplikacji.
--refresh-interval <SECONDS>
Liczba sekund opóźnienia między aktualizowaniem wyświetlanych liczników
--counters <COUNTERS>
Rozdzielona przecinkami lista liczników. Można określić liczniki
provider_name[:counter_name]
. Jeśli parametrprovider_name
jest używany bez kwalifikującej się listy liczników, zostaną wyświetlone wszystkie liczniki od dostawcy. Aby odnaleźć nazwy dostawców i liczników, użyj polecenia dotnet-counters list . W przypadku funkcji EventCountersprovider_name
jest nazwą źródła zdarzeń, a dla miernikówprovider_name
jest nazwą miernika.--format <csv|json>
Format do wyeksportowania. Obecnie dostępne: csv, json.
-o|--output <output>
Nazwa pliku wyjściowego.
-- <command>
Po parametrach konfiguracji kolekcji użytkownik może dołączyć
--
następujące polecenie, aby uruchomić aplikację .NET.dotnet-counters
Uruchomi proces z podanym poleceniem i zbierze żądane metryki. Jest to często przydatne do zbierania metryk dla ścieżki uruchamiania aplikacji i może służyć do diagnozowania lub monitorowania problemów występujących wcześnie przed lub krótko po głównym punkcie wejścia.Uwaga
Użycie tej opcji monitoruje pierwszy proces platformy .NET, który komunikuje się z powrotem do narzędzia, co oznacza, że jeśli polecenie uruchamia wiele aplikacji platformy .NET, będzie zbierać tylko pierwszą aplikację. W związku z tym zaleca się użycie tej opcji w aplikacjach samodzielnie lub przy użyciu
dotnet exec <app.dll>
opcji .Uwaga
Uruchomienie pliku wykonywalnego platformy .NET za pośrednictwem liczników dotnet-counter spowoduje przekierowanie jego danych wejściowych/wyjściowych i nie będzie można wchodzić w interakcje z elementem stdin/stdout. Zamknięcie narzędzia za pomocą CTRL+C lub SIGTERM bezpiecznie zakończy zarówno narzędzie, jak i proces podrzędny. Jeśli proces podrzędny zakończy się przed narzędziem, narzędzie również zakończy działanie. Jeśli musisz użyć stdin/stdout, możesz użyć
--diagnostic-port
opcji . Aby uzyskać więcej informacji, zobacz Korzystanie z portu diagnostycznego.
Uwaga
W systemach Linux i macOS to polecenie oczekuje aplikacji docelowej i dotnet-counters
będzie współużytkować tę samą TMPDIR
zmienną środowiskową. W przeciwnym razie upłynął limit czasu polecenia.
Uwaga
Aby zebrać metryki przy użyciu metody dotnet-counters
, należy uruchomić go jako ten sam użytkownik, co użytkownik uruchamia proces docelowy lub jako główny. W przeciwnym razie narzędzie nie może nawiązać połączenia z procesem docelowym.
Przykłady
Zbierz wszystkie liczniki w interwale odświeżania wynoszącym 3 sekundy i wygeneruj plik CSV jako dane wyjściowe:
> 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.
Rozpocznij
dotnet mvc.dll
jako proces podrzędny i rozpocznij zbieranie liczników środowiska uruchomieniowego oraz liczniki hostingu podstawowego ASP.NET przed uruchomieniem i zapisz je jako dane wyjściowe 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
Wyświetla listę nazw liczników i opisów pogrupowanych według dostawcy.
Streszczenie
dotnet-counters list [-h|--help]
Przykład
> 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
Uwaga
Liczniki Microsoft.AspNetCore.Hosting
są wyświetlane, gdy istnieją procesy, które obsługują te liczniki, na przykład gdy na maszynie hosta jest uruchomiona aplikacja ASP.NET Core.
dotnet-counters monitor
Wyświetla okresowo odświeżane wartości wybranych liczników.
Streszczenie
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
Opcje
-p|--process-id <PID>
Identyfikator procesu, który ma być monitorowany.
-n|--name <name>
Nazwa procesu, który ma być monitorowany.
--diagnostic-port
Nazwa portu diagnostycznego do utworzenia. Zobacz używanie portu diagnostycznego, aby użyć tej opcji, aby rozpocząć monitorowanie liczników z uruchamiania aplikacji.
--refresh-interval <SECONDS>
Liczba sekund opóźnienia między aktualizowaniem wyświetlanych liczników
--counters <COUNTERS>
Rozdzielona przecinkami lista liczników. Można określić liczniki
provider_name[:counter_name]
. Jeśli parametrprovider_name
jest używany bez kwalifikującej się listy liczników, zostaną wyświetlone wszystkie liczniki od dostawcy. Aby odnaleźć nazwy dostawców i liczników, użyj polecenia dotnet-counters list . W przypadku funkcji EventCountersprovider_name
jest nazwą źródła zdarzeń, a dla miernikówprovider_name
jest nazwą miernika.
-- <command>
Po parametrach konfiguracji kolekcji użytkownik może dołączyć --
następujące polecenie, aby uruchomić aplikację .NET. dotnet-counters
Uruchomi proces z podanym poleceniem i będzie monitorować żądane metryki. Jest to często przydatne do zbierania metryk dla ścieżki uruchamiania aplikacji i może służyć do diagnozowania lub monitorowania problemów występujących wcześnie przed lub krótko po głównym punkcie wejścia.
Uwaga
Użycie tej opcji monitoruje pierwszy proces platformy .NET, który komunikuje się z powrotem do narzędzia, co oznacza, że jeśli polecenie uruchamia wiele aplikacji platformy .NET, będzie zbierać tylko pierwszą aplikację. W związku z tym zaleca się użycie tej opcji w aplikacjach samodzielnie lub przy użyciu dotnet exec <app.dll>
opcji .
Uwaga
Uruchomienie pliku wykonywalnego platformy .NET za pośrednictwem liczników dotnet-counter spowoduje przekierowanie jego danych wejściowych/wyjściowych i nie będzie można wchodzić w interakcje z elementem stdin/stdout. Zamknięcie narzędzia za pomocą CTRL+C lub SIGTERM bezpiecznie zakończy zarówno narzędzie, jak i proces podrzędny. Jeśli proces podrzędny zakończy się przed narzędziem, narzędzie również zakończy działanie. Jeśli musisz użyć stdin/stdout, możesz użyć --diagnostic-port
opcji . Aby uzyskać więcej informacji, zobacz Korzystanie z portu diagnostycznego.
Uwaga
W systemach Linux i macOS to polecenie oczekuje aplikacji docelowej i dotnet-counters
będzie współużytkować tę samą TMPDIR
zmienną środowiskową.
Uwaga
Aby monitorować metryki przy użyciu dotnet-counters
programu , należy uruchomić go jako ten sam użytkownik, co użytkownik uruchamia proces docelowy lub jako główny.
Uwaga
Jeśli zostanie wyświetlony komunikat o błędzie podobny do następującego: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.
, próbujesz użyć dotnet-counters
, który ma niezgodność bitów względem procesu docelowego. Upewnij się, że pobrano poprawną bitność narzędzia w linku instalacji .
Przykłady
Monitoruj wszystkie liczniki z
System.Runtime
przedziału czasu odświeżania wynoszącym 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
Monitoruj tylko użycie procesora CPU i rozmiar sterty 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
Monitoruj
EventCounter
wartości zdefiniowane przezEventSource
użytkownika. Aby uzyskać więcej informacji, zobacz Samouczek: mierzenie wydajności przy użyciu usługi EventCounters na platformie .NET Core.> dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal Press p to pause, r to resume, q to quit. request 100
Wyświetl wszystkie dobrze znane liczniki, które są dostępne w programie
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
Wyświetl wszystkie dobrze znane liczniki dostępne w
dotnet-counters
aplikacjach platformy .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
Uruchom
my-aspnet-server.exe
i monitoruj liczbę zestawów załadowanych z jego uruchamiania:> 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
Uruchom
my-aspnet-server.exe
polecenie za pomocąarg1
argumentów wiersza polecenia iarg2
jako i monitoruj jego zestaw roboczy i rozmiar sterty GC od jego uruchomienia:> 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
Wyświetla listę procesów dotnet, które mogą być monitorowane przez dotnet-counters
program .
dotnet-counters
W wersji 6.0.320703 lub nowszej są również wyświetlane argumenty wiersza polecenia, z którymi uruchomiono każdy proces, jeśli jest dostępny.
Streszczenie
dotnet-counters ps [-h|--help]
Przykład
Załóżmy, że uruchamiasz długotrwałą aplikację przy użyciu polecenia dotnet run --configuration Release
. W innym oknie uruchomisz dotnet-counters ps
polecenie . Dane wyjściowe, które zobaczysz, są następujące. Argumenty wiersza polecenia, jeśli istnieją, są wyświetlane w dotnet-counters
wersji 6.0.320703 lub nowszej.
> dotnet-counters ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Korzystanie z portu diagnostycznego
Port diagnostyczny to funkcja środowiska uruchomieniowego, która umożliwia rozpoczęcie monitorowania lub zbieranie liczników z uruchamiania aplikacji. Aby to zrobić, dotnet-counters
możesz użyć metody zgodnie z dotnet-counters <collect|monitor> -- <command>
opisem w powyższych przykładach lub użyć --diagnostic-port
opcji .
Użycie dotnet-counters <collect|monitor> -- <command>
polecenia w celu uruchomienia aplikacji jako procesu podrzędnego jest najprostszym sposobem szybkiego monitorowania jej z poziomu uruchamiania.
Jeśli jednak chcesz uzyskać dokładnszą kontrolę nad okresem istnienia monitorowanej aplikacji (na przykład monitorować aplikację tylko przez pierwsze 10 minut i kontynuować wykonywanie) lub jeśli musisz wchodzić w interakcję z aplikacją przy użyciu interfejsu wiersza polecenia, opcja pozwala --diagnostic-port
kontrolować zarówno monitorowaną aplikację docelową, jak i dotnet-counters
.
Poniższe polecenie sprawia, że liczniki dotnet-counter tworzą gniazdo diagnostyczne o nazwie
myport.sock
i czekają na połączenie.dotnet-counters collect --diagnostic-port myport.sock
Wyjście:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
W oddzielnej konsoli uruchom aplikację docelową ze zmienną środowiskową
DOTNET_DiagnosticPorts
ustawioną na wartość w danych wyjściowychdotnet-counters
.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2
Powinno to następnie umożliwić
dotnet-counters
rozpoczęcie zbierania liczników w systemiemy-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.
Ważne
Uruchomienie aplikacji
dotnet run
za pomocą polecenia może być problematyczne, ponieważ interfejs wiersza polecenia dotnet może zduplikować wiele procesów podrzędnych, które nie są Twoją aplikacją, i mogą łączyć się zdotnet-counters
nią przed aplikacją, pozostawiając aplikację do zawieszenia w czasie wykonywania. Zaleca się bezpośrednie użycie samodzielnej wersji aplikacji lub użyciedotnet exec
jej do uruchamiania aplikacji.