Badanie liczników wydajności (liczniki dotnet-counter)
Ten artykuł dotyczy: ✔️ dotnet-counters
wersja 3.0.47001 i nowsze wersje
Instalowanie
Istnieją dwa sposoby pobierania i instalowania dotnet-counters
programu :
narzędzie globalne dotnet:
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 | Ramię | Arm-x64 Linux x64 | Ramię | Arm64 | musl-x64 | musl-Arm64
Uwaga
Aby korzystać z dotnet-counters
aplikacji x86, potrzebna jest odpowiednia wersja 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, które są publikowane za pośrednictwem interfejsu API lub interfejsu EventCounterMeter API. Na przykład możesz szybko monitorować takie elementy jak użycie procesora CPU lub szybkość wyjątków zgłaszanych w aplikacji .NET Core, aby sprawdzić, czy istnieje coś podejrzanego przed rozpoczęciem bardziej poważnego badania wydajności przy użyciu polecenia PerfView
lub 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 liczników.
-n|--name <name>
Nazwa procesu do 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ć
provider_name[:counter_name]
liczniki . Jeśli parametrprovider_name
jest używany bez listy kwalifikowanych 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 usługi 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>
(tylko w przypadku aplikacji docelowych z programem .NET 5 lub nowszym)Po parametrach konfiguracji kolekcji użytkownik może dołączyć
--
następujące polecenie, aby uruchomić aplikację platformy .NET z co najmniej 5.0 środowiska uruchomieniowego.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, które występują wcześnie przed lub krótko po głównym punkcie wejścia.Uwaga
Użycie tej opcji monitoruje pierwszy proces platformy .NET 5, który komunikuje się z powrotem do narzędzia, co oznacza, że jeśli polecenie uruchamia wiele aplikacji .NET, będzie zbierać tylko pierwszą aplikację. W związku z tym zaleca się użycie tej opcji w aplikacjach samodzielnych lub przy użyciu
dotnet exec <app.dll>
opcji .Uwaga
Uruchomienie pliku wykonywalnego platformy .NET za pośrednictwem liczników dotnet spowoduje przekierowanie danych wejściowych/wyjściowych i nie będzie można wchodzić w interakcję z elementem stdin/stdout. Zamknięcie narzędzia za pomocą klawiszy CTRL+C lub SIGTERM umożliwi bezpieczne zakończenie zarówno narzędzia, jak i procesu podrzędnego. Jeśli proces podrzędny zakończy się przed narzędziem, narzędzie zakończy się również i ślad powinien być bezpiecznie wyświetlany. Jeśli musisz użyć polecenia stdin/stdout, możesz użyć
--diagnostic-port
opcji . Aby uzyskać więcej informacji, zobacz Używanie 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 programu dotnet-counters
, należy uruchomić go jako ten sam użytkownik, co użytkownik uruchamiając 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 i ASP.NET Core liczniki hostingu z uruchamiania 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 aplikacja ASP.NET Core jest uruchomiona na maszynie hosta.
dotnet-counters monitor
Wyświetla okresowo odświeżanie 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 do monitorowania.
-n|--name <name>
Nazwa procesu do monitorowania.
--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ć
provider_name[:counter_name]
liczniki . Jeśli parametrprovider_name
jest używany bez listy kwalifikowanych 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 usługi EventCountersprovider_name
jest nazwą źródła zdarzeń, a dla miernikówprovider_name
jest nazwą miernika.
-- <command>
(tylko w przypadku aplikacji docelowych z programem .NET 5 lub nowszym)
Po parametrach konfiguracji kolekcji użytkownik może dołączyć --
następujące polecenie, aby uruchomić aplikację platformy .NET z co najmniej 5.0 środowiska uruchomieniowego. 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, które występują wcześnie przed lub krótko po głównym punkcie wejścia.
Uwaga
Użycie tej opcji monitoruje pierwszy proces platformy .NET 5, który komunikuje się z powrotem do narzędzia, co oznacza, że jeśli polecenie uruchamia wiele aplikacji .NET, będzie zbierać tylko pierwszą aplikację. W związku z tym zaleca się użycie tej opcji w aplikacjach samodzielnych lub przy użyciu dotnet exec <app.dll>
opcji .
Uwaga
Uruchomienie pliku wykonywalnego platformy .NET za pośrednictwem liczników dotnet spowoduje przekierowanie danych wejściowych/wyjściowych i nie będzie można wchodzić w interakcję z elementem stdin/stdout. Zamknięcie narzędzia za pomocą klawiszy CTRL+C lub SIGTERM bezpiecznie zakończy zarówno narzędzie, jak i proces podrzędny. Jeśli proces podrzędny zakończy działanie 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 polecenia dotnet-counters
, 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 funkcji 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 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 podczas uruchamiania (tylko platforma.NET 5 lub nowsza):Ważne
Działa to tylko w przypadku aplikacji z programem .NET 5 lub nowszym.
> 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 polecenie
my-aspnet-server.exe
przyarg1
użyciu argumentów wiersza polecenia iarg2
jako i monitoruj jego zestaw roboczy oraz rozmiar sterty GC od jego uruchomienia (tylko platforma.NET 5 lub nowsza):Ważne
Działa to tylko w przypadku aplikacji z programem .NET 5 lub nowszym.
> 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 wyświetlane są również 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
Ważne
Działa to tylko w przypadku aplikacji z programem .NET 5 lub nowszym.
Port diagnostyczny to funkcja środowiska uruchomieniowego dodana na platformie .NET 5, która umożliwia rozpoczęcie monitorowania lub zbierania liczników podczas uruchamiania aplikacji. W tym dotnet-counters
celu można 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, przy użyciu --diagnostic-port
opcji możesz 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 oczekują na połączenie.dotnet-counters collect --diagnostic-port myport.sock
Dane wyjściowe:
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 usłudzemy-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 za
dotnet run
pomocą polecenia może być problematyczne, ponieważ interfejs wiersza polecenia dotnet może spowodować zduplikowanie wielu procesów podrzędnych, które nie są Twoją aplikacją, i mogą łączyć się zdotnet-counters
aplikacją 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 uruchomienia aplikacji.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla