Udostępnij przez


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 Counter<T> s Czas procesora CPU używany przez proces.
Atrybut Typ 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 od: .NET 9.

Metryka: dotnet.process.memory.working_set
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.process.memory.working_set UpDownCounter<T> 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 od: .NET 9.

Metryka: dotnet.gc.collections
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.gc.collections Counter<T> {collection} Liczba odzyskiwania pamięci, które wystąpiły od czasu rozpoczęcia procesu.
Atrybut Typ opis Przykłady Obecność
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 od: .NET 9.

Metryka: dotnet.gc.heap.total_allocated
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.gc.heap.total_allocated Counter<T> 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 od: .NET 9.

Metryka: dotnet.gc.last_collection.memory.committed_size
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.gc.last_collection.memory.committed_size UpDownCounter<T> 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 od: .NET 9.

Metryka: dotnet.gc.last_collection.heap.size
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.gc.last_collection.heap.size UpDownCounter<T> By Zarządzany rozmiar sterty GC (w tym fragmentacja), jak zaobserwowano podczas ostatniego odzyskiwania pamięci.
Atrybut Typ opis Przykłady Obecność
gc.heap.generation string Nazwa modułu odśmiecającego pamięci zarządzanego generowania stert. gen0; gen1; ; gen2loh; 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 od: .NET 9.

Metryka: dotnet.gc.last_collection.heap.fragmentation.size
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.gc.last_collection.heap.fragmentation.size UpDownCounter<T> By Fragmentacja stert, jak zaobserwowano podczas ostatniego odzyskiwania pamięci.
Atrybut Typ opis Przykłady Obecność
gc.heap.generation string Nazwa modułu odśmiecającego pamięci zarządzanego generowania stert. gen0; gen1; ; gen2loh; poh Zawsze

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 od: .NET 9.

Metryka: dotnet.gc.pause.time
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.gc.pause.time Counter<T> 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 od: .NET 9.

Metryka: dotnet.jit.compiled_il.size
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.jit.compiled_il.size Counter<T> 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 od: .NET 9.

Metryka: dotnet.jit.compiled_methods
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.jit.compiled_methods Counter<T> {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 od: .NET 9.

Metryka: dotnet.jit.compilation.time
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.jit.compilation.time Counter<T> 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 od: .NET 9.

Metryka: dotnet.thread_pool.thread.count
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.thread_pool.thread.count UpDownCounter<T> {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 od: .NET 9.

Metryka: dotnet.thread_pool.work_item.count
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.thread_pool.work_item.count Counter<T> {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 od: .NET 9.

Metryka: dotnet.thread_pool.queue.length
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.thread_pool.queue.length UpDownCounter<T> {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 od: .NET 9.

Metryka: dotnet.monitor.lock_contentions
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.monitor.lock_contentions Counter<T> {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 od: .NET 9.

Metryka: dotnet.timer.count
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.timer.count UpDownCounter<T> {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 od: .NET 9.

Metryka: dotnet.assembly.count
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.assembly.count UpDownCounter<T> {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 od: .NET 9.

Metryka: dotnet.exceptions
Nazwisko Typ instrumentu Jednostka (UCUM) opis
dotnet.exceptions Counter<T> {exception} Liczba wyjątków zgłoszonych w kodzie zarządzanym.
Atrybut Typ 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 od: .NET 9.