Metryki środowiska uruchomieniowego platformy .NET
W tym artykule opisano wbudowane metryki dla bibliotek środowiska uruchomieniowego platformy .NET, które są tworzone przy użyciu interfejsu System.Diagnostics.Metrics API. Aby uzyskać listę metryk na podstawie starszego interfejsu API EventCounters , zobacz Dostępne liczniki.
Napiwek
Aby uzyskać więcej informacji na temat zbierania i zgłaszania tych metryk, zobacz Zbieranie metryk.
System.Runtime
Miernik System.Runtime
raportuje pomiary z GC, JIT, AssemblyLoader, Threadpool i obsługi wyjątków części środowiska uruchomieniowego platformy .NET, a także niektóre metryki procesora i pamięci z systemu operacyjnego. Te metryki są dostępne automatycznie dla wszystkich aplikacji platformy .NET.
Metryka: dotnet.process.cpu.time
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.process.cpu.time |
Licznik | s |
Czas procesora CPU używany przez proces. |
Atrybut | Type | Opis | Przykłady | Obecność |
---|---|---|---|---|
cpu.mode |
string | Tryb procesora CPU. | user ; system |
Zawsze |
Ta metryka zgłasza te same wartości co uzyskiwanie dostępu do właściwości System.Diagnostics.Process czasu procesora dla bieżącego procesu. Tryb system
odpowiada trybowi PrivilegedProcessorTime i user
odpowiada UserProcessorTime
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.process.memory.working_set
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.process.memory.working_set |
UpDownCounter | By |
Liczba bajtów pamięci fizycznej zamapowanych na kontekst procesu. |
Ta metryka zgłasza te same wartości co właściwość wywołująca Environment.WorkingSet .
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.gc.collections
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.gc.collections |
Licznik | {collection} |
Liczba odzyskiwania pamięci, które wystąpiły od czasu rozpoczęcia procesu. |
Atrybut | Type | Opis | Przykłady | Obecność |
---|---|---|---|---|
dotnet.gc.heap.generation |
string | Nazwa zbieranego maksymalnego zarządzanego generowania stert. | gen0 ; gen1 ; gen2 |
Zawsze |
GC platformy .NET to generowanie modułu odśmiecającego śmieci. Za każdym razem, gdy moduł odśmieceń pamięci jest uruchamiany, używa heurystyki do wybrania maksymalnej generacji, a następnie zbiera obiekty we wszystkich generacjach do wybranej wartości maksymalnej. Na przykład gen1
kolekcja zbiera wszystkie obiekty w generacjach 0 i 1. Kolekcja gen2
zbiera wszystkie obiekty w generacjach 0, 1 i 2. Aby uzyskać więcej informacji na temat kontrolera GC platformy .NET i generowania odzyskiwania pamięci, zobacz przewodnik odzyskiwania pamięci platformy .NET.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.gc.heap.total_allocated
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.gc.heap.total_allocated |
Licznik | By |
Przybliżona liczba bajtów przydzielonych do zarządzanego sterty GC od rozpoczęcia procesu. Zwrócona wartość nie zawiera żadnych alokacji natywnych. |
Ta metryka zgłasza te same wartości co wywołanie metody GC.GetTotalAllocatedBytes. Aby uzyskać więcej informacji na temat kontrolera GC platformy .NET, zobacz przewodnik odzyskiwania pamięci platformy .NET.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.gc.last_collection.memory.committed_size
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.gc.last_collection.memory.committed_size |
UpDownCounter | By |
Ilość zatwierdzonej pamięci wirtualnej używanej przez GC platformy .NET, jak zaobserwowano podczas ostatniego odzyskiwania pamięci. |
Ta metryka zgłasza te same wartości co wywołanie metody GCMemoryInfo.TotalCommittedBytes. Zatwierdzona pamięć wirtualna może być większa niż rozmiar sterty, ponieważ obejmuje ona zarówno pamięć do przechowywania istniejących obiektów (rozmiar sterty) i pewną dodatkową pamięć, która jest gotowa do obsługi nowo przydzielonych obiektów w przyszłości. Aby uzyskać więcej informacji na temat kontrolera GC platformy .NET, zobacz przewodnik odzyskiwania pamięci platformy .NET.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.gc.last_collection.heap.size
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.gc.last_collection.heap.size |
UpDownCounter | By |
Zarządzany rozmiar sterty GC (w tym fragmentacja), jak zaobserwowano podczas ostatniego odzyskiwania pamięci. |
Atrybut | Type | Opis | Przykłady | Obecność |
---|---|---|---|---|
dotnet.gc.heap.generation |
string | Nazwa modułu odśmiecającego pamięci zarządzanego generowania stert. | gen0 ; gen1 ; gen2 ;loh ;poh |
Zawsze |
GC platformy .NET dzieli stertę na pokolenia. Oprócz standardowych numerowanych pokoleń GC umieszcza również niektóre obiekty w dwóch specjalnych generacjach:
- Duże sterta obiektów (LOH) przechowuje obiekty platformy .NET, które są bardzo duże w porównaniu z typowymi obiektami.
- Przypięty sterta obiektu (POH) przechowuje obiekty przydzielone przy użyciu interfejsu GC.AllocateArray API, gdy
pinned
parametr ma wartość true.
Obie te specjalne generacje są zbierane podczas gen2
kolekcji GC. Aby uzyskać więcej informacji na temat kontrolera GC platformy .NET, zobacz przewodnik odzyskiwania pamięci platformy .NET.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.gc.last_collection.heap.fragmentation.size
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.gc.last_collection.heap.fragmentation.size |
UpDownCounter | By |
Fragmentacja stert, jak zaobserwowano podczas ostatniego odzyskiwania pamięci. |
Ta metryka zgłasza te same wartości co wywołanie metody GCGenerationInfo.FragmentationAfterBytes.
Gdy obiekty platformy .NET są przydzielane, początkowo zwykle są one rozmieszczone w pamięci. Jeśli jednak niektóre z tych obiektów zostaną później zebrane przez GC, spowoduje to przerwy w nieużywanej pamięci między pozostałymi obiektami na żywo. Te luki reprezentują część stert GC, która nie jest obecnie używana do przechowywania obiektów, często nazywanych "fragmentacją". GC może ponownie używać bajtów fragmentacji w przyszłości w przypadku nowych alokacji obiektów, jeśli rozmiar obiektu jest wystarczająco mały, aby zmieścić się w jednym z luk. GC może również wykonać specjalne kompaktujące odzyskiwanie pamięci, które przenosi pozostałe obiekty aktywne obok siebie, o ile obiekty nie zostały przypięte na miejscu.
Aby uzyskać więcej informacji na temat sposobu działania kontrolera GC platformy .NET, analizowania wydajności GC i roli fragmentacji, zobacz Analiza wydajności pamięci platformy .NET.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.gc.pause.time
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.gc.pause.time |
Licznik | s |
Łączna ilość czasu wstrzymania w GC od czasu rozpoczęcia procesu. |
Ta metryka zgłasza te same wartości co wywołanie metody GC.GetTotalPauseDuration().
Za każdym razem, gdy usługa GC platformy .NET wykonuje kolekcję, musi na krótko wstrzymać wszystkie wątki z uruchomionym kodem zarządzanym, aby określić, do których obiektów są nadal odwoływane. Ta metryka raportuje sumę wszystkich tych czasów wstrzymania od rozpoczęcia procesu. Tej metryki można użyć do określenia, jaki ułamek czasu wątków spędza czas wstrzymania dla GC w porównaniu z czasem, w którym mogą uruchamiać kod zarządzany.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.jit.compiled_il.size
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.jit.compiled_il.size |
Licznik | By |
Liczba bajtów języka pośredniego, które zostały skompilowane od czasu rozpoczęcia procesu. |
Ta metryka zgłasza te same wartości co wywołanie metody JitInfo.GetCompiledILBytes.
Podczas kompilowania aplikacji platformy .NET kod zarządzany jest początkowo kompilowany z języka wysokiego poziomu, takiego jak C#, VB lub F# do języka pośredniego (IL). Następnie po uruchomieniu programu kompilator just in time (JIT) platformy .NET konwertuje il na kod maszynowy.
Ponieważ kompilacja JIT występuje po raz pierwszy podczas uruchamiania metody, większość kompilacji JIT zwykle występuje podczas uruchamiania aplikacji. Zmniejszenie ilości języka IL skompilowanego przez JIT może poprawić czas uruchamiania aplikacji.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.jit.compiled_methods
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.jit.compiled_methods |
Licznik | {method} |
Liczba prób skompilowanych metod kompilatora JIT (re)od początku procesu. |
Ta metryka zgłasza te same wartości co wywołanie metody JitInfo.GetCompiledMethodCount.
Podczas kompilowania aplikacji platformy .NET kod zarządzany jest początkowo kompilowany z języka wysokiego poziomu, takiego jak C#, VB lub F# do języka pośredniego (IL). Następnie po uruchomieniu programu kompilator just in time (JIT) platformy .NET konwertuje il na kod maszynowy.
Ponieważ kompilacja JIT występuje po raz pierwszy podczas uruchamiania metody, większość kompilacji JIT zwykle występuje podczas uruchamiania aplikacji. Zmniejszenie liczby metod, które należy skompilować w trybie JIT, może poprawić czas uruchamiania aplikacji.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.jit.compilation.time
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.jit.compilation.time |
Licznik | s |
Ilość czasu, przez jaki kompilator JIT spędził kompilowanie metod od czasu rozpoczęcia procesu. |
Ta metryka zgłasza te same wartości co wywołanie metody JitInfo.GetCompilationTime.
Podczas kompilowania aplikacji platformy .NET kod zarządzany jest początkowo kompilowany z języka wysokiego poziomu, takiego jak C#, VB lub F# do języka pośredniego (IL). Następnie po uruchomieniu programu kompilator just in time (JIT) platformy .NET konwertuje il na kod maszynowy.
Ponieważ kompilacja JIT występuje po raz pierwszy podczas uruchamiania metody, większość kompilacji JIT zwykle występuje podczas uruchamiania aplikacji. Skrócenie czasu spędzonego na kompilowanie JIT może poprawić czas uruchamiania aplikacji.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.thread_pool.thread.count
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.thread_pool.thread.count |
UpDownCounter | {thread} |
Liczba wątków, które obecnie istnieją. |
Ta metryka zgłasza te same wartości co wywołanie metody ThreadPool.ThreadCount.
Platforma .NET używa puli wątków do planowania elementów roboczych na innych wątkach. Ta metryka zawiera liczbę wątków roboczych aktualnie zarządzanych przez tę pulę wątków.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.thread_pool.work_item.count
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.thread_pool.work_item.count |
Licznik | {work_item} |
Liczba elementów roboczych ukończonych przez pulę wątków od czasu rozpoczęcia procesu. |
Ta metryka zgłasza te same wartości co wywołanie metody ThreadPool.CompletedWorkItemCount.
Platforma .NET używa puli wątków do planowania elementów roboczych na innych wątkach. Ta metryka zawiera liczbę elementów roboczych, które zostały wykonane przez wątki puli wątków.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.thread_pool.queue.length
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.thread_pool.queue.length |
UpDownCounter | {work_item} |
Liczba elementów roboczych, które są obecnie kolejkowane do przetworzenia przez pulę wątków. |
Ta metryka zgłasza te same wartości co wywołanie metody ThreadPool.PendingWorkItemCount.
Platforma .NET używa puli wątków do planowania elementów roboczych na innych wątkach. Ta metryka zawiera liczbę elementów roboczych, które są obecnie w kolejce do wykonania przez jeden z wątków puli wątków.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.monitor.lock_contentions
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.monitor.lock_contentions |
Licznik | {contention} |
Liczba wystąpień rywalizacji podczas próby uzyskania blokady monitora od czasu rozpoczęcia procesu. |
Ta metryka zgłasza te same wartości co wywołanie metody Monitor.LockContentionCount.
Platforma .NET obsługuje używanie dowolnego obiektu zarządzanego jako blokady z interfejsami API, takimi jak Monitor.Enter lub z instrukcją lock. Jeśli jeden wątek ma już blokadę, podczas gdy drugi wątek próbuje go uzyskać, jest to nazywane rywalizacją o blokadę.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.timer.count
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.timer.count |
UpDownCounter | {timer} |
Liczba wystąpień czasomierza, które są obecnie aktywne. |
Ta metryka zgłasza te same wartości co wywołanie metody Timer.ActiveCount.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.assembly.count
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.assembly.count |
UpDownCounter | {assembly} |
Liczba zestawów platformy .NET, które są obecnie ładowane. |
Ta metryka zgłasza te same wartości co wywołanie, AppDomain.GetAssemblies() a następnie sprawdza długość zwracanej tablicy.
Dostępne począwszy od: .NET 9.0.
Metryka: dotnet.exceptions
Nazwisko | Typ instrumentu | Jednostka (UCUM) | opis |
---|---|---|---|
dotnet.exceptions |
Licznik | {exception} |
Liczba wyjątków zgłoszonych w kodzie zarządzanym. |
Atrybut | Type | Opis | Przykłady | Obecność |
---|---|---|---|---|
error.type |
string | Zgłoszony typ wyjątku. | System.OperationCanceledException ; Contoso.MyException |
Required |
Ta metryka zgłasza te same wartości co zliczanie wywołań zdarzenia AppDomain.FirstChanceException .
Dostępne począwszy od: .NET 9.0.