Condividi tramite


Metriche del runtime .NET

Questo articolo descrive le metriche predefinite per le librerie di runtime .NET generate tramite l'API System.Diagnostics.Metrics . Per un elenco delle metriche basate sull'API EventCounters precedente, vedere Contatori disponibili.

Suggerimento

Per altre informazioni su come raccogliere e segnalare queste metriche, vedere Raccolta di metriche.

System.Runtime

Il System.Runtime contatore segnala le misurazioni delle parti GC, JIT, AssemblyLoader, Threadpool e gestione delle eccezioni del runtime .NET, nonché alcune metriche di CPU e memoria del sistema operativo. Queste metriche sono disponibili automaticamente per tutte le app .NET.

Metrica: dotnet.process.cpu.time
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.process.cpu.time Contatore s Tempo cpu usato dal processo.
Attributo Tipo Descrizione Esempi Presenza
cpu.mode string Modalità della CPU. user; system Sempre

Questa metrica segnala gli stessi valori dell'accesso alle proprietà System.Diagnostics.Process del tempo del processore per il processo corrente. La system modalità corrisponde a PrivilegedProcessorTime e user la modalità corrisponde a UserProcessorTime

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.process.memory.working_set
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.process.memory.working_set UpDownCounter By Numero di byte di memoria fisica mappata al contesto del processo.

Questa metrica segnala gli stessi valori della proprietà chiamante Environment.WorkingSet .

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.gc.collections
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.gc.collections Contatore {collection} Numero di Garbage Collection che si sono verificati dopo l'avvio del processo.
Attributo Tipo Descrizione Esempi Presenza
dotnet.gc.heap.generation string Nome della generazione massima dell'heap gestita da raccogliere. gen0; gen1; gen2 Sempre

.NET GC è un Garbage Collector generazionale. Ogni volta che viene eseguito il Garbage Collector, usa l'euristica per selezionare una generazione massima e quindi raccoglie gli oggetti in tutte le generazioni fino al massimo selezionato. Ad esempio, una gen1 raccolta raccoglie tutti gli oggetti nelle generazioni 0 e 1. Un gen2 insieme raccoglie tutti gli oggetti nelle generazioni 0, 1 e 2. Per altre informazioni su .NET GC e garbage collection generazionale, vedere la Guida alla Garbage Collection di .NET.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.gc.heap.total_allocated
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.gc.heap.total_allocated Contatore By Numero approssimativo di byte allocati nell'heap GC gestito dall'avvio del processo. Il valore restituito non include allocazioni native.

Questa metrica segnala gli stessi valori della chiamata a GC.GetTotalAllocatedBytes. Per altre informazioni sull'GC .NET, vedere la Guida alla Garbage Collection di .NET.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.gc.last_collection.memory.committed_size
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.gc.last_collection.memory.committed_size UpDownCounter By Quantità di memoria virtuale di cui è stato eseguito il commit in uso dall'GC .NET, come osservato durante la garbage collection più recente.

Questa metrica segnala gli stessi valori della chiamata a GCMemoryInfo.TotalCommittedBytes. La memoria virtuale sottoposta a commit può essere superiore alla dimensione dell'heap perché include sia la memoria per l'archiviazione di oggetti esistenti (dimensioni dell'heap) sia una quantità di memoria aggiuntiva pronta per gestire gli oggetti appena allocati in futuro. Per altre informazioni sull'GC .NET, vedere la Guida alla Garbage Collection di .NET.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.gc.last_collection.heap.size
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.gc.last_collection.heap.size UpDownCounter By Dimensioni dell'heap GC gestito (inclusa la frammentazione), come osservato durante la garbage collection più recente.
Attributo Tipo Descrizione Esempi Presenza
dotnet.gc.heap.generation string Nome della generazione dell'heap gestita da Garbage Collector. gen0; gen1; gen2;loh;poh Sempre

.NET GC divide l'heap in generazioni. Oltre alle generazioni numerate standard, il GC inserisce anche alcuni oggetti in due generazioni speciali:

  • L'heap di oggetti di grandi dimensioni archivia gli oggetti .NET molto grandi rispetto agli oggetti tipici.
  • L'heap dell'oggetto aggiunto archivia gli oggetti allocati usando l'API GC.AllocateArray quando il pinned parametro è true.

Entrambe queste generazioni speciali vengono raccolte durante gen2 le raccolte GC. Per altre informazioni su .NET GC, vedere la Guida alla Garbage Collection di .NET.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.gc.last_collection.heap.fragmentation.size
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.gc.last_collection.heap.fragmentation.size UpDownCounter By Frammentazione dell'heap, come osservato durante la garbage collection più recente.

Questa metrica segnala gli stessi valori della chiamata a GCGenerationInfo.FragmentationAfterBytes.

Quando gli oggetti .NET vengono allocati, inizialmente tendono a essere disposti in modo contiguo in memoria. Tuttavia, se alcuni di questi oggetti vengono raccolti in un secondo momento dal GC, ciò crea lacune di memoria inutilizzata tra gli oggetti attivi che rimangono. Questi gap rappresentano la parte dell'heap GC attualmente non usata per archiviare oggetti, spesso denominati "frammentazione". Il GC può riutilizzare i byte di frammentazione in futuro per le nuove allocazioni di oggetti se la dimensione dell'oggetto è sufficientemente piccola da adattarsi a una delle lacune. Il processo GC può anche eseguire un'operazione speciale di Garbage Collection compattante che sposta gli oggetti attivi rimanenti l'uno accanto all'altro, purché gli oggetti non siano stati aggiunti.

Per altre informazioni sul funzionamento di .NET GC, sull'analisi delle prestazioni GC e sulla frammentazione del ruolo, vedere Analisi delle prestazioni della memoria .NET.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.gc.pause.time
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.gc.pause.time Contatore s Quantità totale di tempo sospesa in GC dall'avvio del processo.

Questa metrica segnala gli stessi valori della chiamata a GC.GetTotalPauseDuration().

Ogni volta che GC .NET esegue una raccolta, è necessario sospendere brevemente tutti i thread che eseguono codice gestito per determinare quali oggetti sono ancora a cui viene fatto riferimento. Questa metrica indica la somma di tutti questi tempi di pausa dall'avvio del processo. È possibile usare questa metrica per determinare la frazione di tempo usata dai thread in pausa per GC rispetto al tempo in cui sono in grado di eseguire il codice gestito.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.jit.compiled_il.size
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.jit.compiled_il.size Contatore By Numero di byte del linguaggio intermedio compilato dall'avvio del processo.

Questa metrica segnala gli stessi valori della chiamata a JitInfo.GetCompiledILBytes.

Quando si compila un'app .NET, il codice gestito viene inizialmente compilato da un linguaggio di alto livello, ad esempio C#, VB o F# in linguaggio intermedio (IL). Quindi, quando viene eseguito il programma, il compilatore JIT (Just-In-Time) .NET converte il codice DEL nel codice del computer.

Poiché la compilazione JIT viene eseguita la prima volta che viene eseguito un metodo, la maggior parte della compilazione JIT tende a verificarsi durante l'avvio dell'applicazione. La riduzione della quantità di IL compilata jit può migliorare il tempo di avvio dell'applicazione.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.jit.compiled_methods
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.jit.compiled_methods Contatore {method} Numero di volte in cui il compilatore JIT (ri)compilatore dopo l'avvio del processo.

Questa metrica segnala gli stessi valori della chiamata a JitInfo.GetCompiledMethodCount.

Quando si compila un'app .NET, il codice gestito viene inizialmente compilato da un linguaggio di alto livello, ad esempio C#, VB o F# in linguaggio intermedio (IL). Quindi, quando viene eseguito il programma, il compilatore JIT (Just-In-Time) .NET converte il codice DEL nel codice del computer.

Poiché la compilazione JIT viene eseguita la prima volta che viene eseguito un metodo, la maggior parte della compilazione JIT tende a verificarsi durante l'avvio dell'applicazione. La riduzione del numero di metodi che devono essere compilati JIT può migliorare il tempo di avvio dell'applicazione.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.jit.compilation.time
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.jit.compilation.time Contatore s La quantità di tempo impiegato dal compilatore JIT per la compilazione dei metodi dall'avvio del processo.

Questa metrica segnala gli stessi valori della chiamata a JitInfo.GetCompilationTime.

Quando si compila un'app .NET, il codice gestito viene inizialmente compilato da un linguaggio di alto livello, ad esempio C#, VB o F# in linguaggio intermedio (IL). Quindi, quando viene eseguito il programma, il compilatore JIT (Just-In-Time) .NET converte il codice DEL nel codice del computer.

Poiché la compilazione JIT viene eseguita la prima volta che viene eseguito un metodo, la maggior parte della compilazione JIT tende a verificarsi durante l'avvio dell'applicazione. La riduzione del tempo impiegato per la compilazione JIT può migliorare il tempo di avvio dell'applicazione.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.thread_pool.thread.count
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.thread_pool.thread.count UpDownCounter {thread} Numero di thread del pool di thread attualmente esistenti.

Questa metrica segnala gli stessi valori della chiamata a ThreadPool.ThreadCount.

.NET usa un pool di thread per pianificare gli elementi di lavoro in altri thread. Questa metrica fornisce il numero di thread di lavoro attualmente gestiti dal pool di thread.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.thread_pool.work_item.count
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.thread_pool.work_item.count Contatore {work_item} Numero di elementi di lavoro completati dal pool di thread dall'avvio del processo.

Questa metrica segnala gli stessi valori della chiamata a ThreadPool.CompletedWorkItemCount.

.NET usa un pool di thread per pianificare gli elementi di lavoro in altri thread. Questa metrica fornisce il numero di elementi di lavoro eseguiti dai thread del pool di thread.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.thread_pool.queue.length
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.thread_pool.queue.length UpDownCounter {work_item} Numero di elementi di lavoro attualmente accodati da elaborare dal pool di thread.

Questa metrica segnala gli stessi valori della chiamata a ThreadPool.PendingWorkItemCount.

.NET usa un pool di thread per pianificare gli elementi di lavoro in altri thread. Questa metrica fornisce il numero di elementi di lavoro attualmente in coda da eseguire da uno dei thread del pool di thread.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.monitor.lock_contentions
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.monitor.lock_contentions Contatore {contention} Numero di conflitti durante il tentativo di acquisizione di un blocco di monitoraggio dall'avvio del processo.

Questa metrica segnala gli stessi valori della chiamata a Monitor.LockContentionCount.

.NET supporta l'uso di qualsiasi oggetto gestito come blocco, con API come Monitor.Enter o con l'istruzione lock. Se un thread contiene già un blocco mentre un secondo thread tenta di acquisirlo, viene chiamato contesa di blocco.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.timer.count
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.timer.count UpDownCounter {timer} Numero di istanze timer attualmente attive.

Questa metrica segnala gli stessi valori della chiamata a Timer.ActiveCount.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.assembly.count
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.assembly.count UpDownCounter {assembly} Numero di assembly .NET attualmente caricati.

Questa metrica segnala gli stessi valori della chiamata AppDomain.GetAssemblies() e quindi controlla la lunghezza della matrice restituita.

Disponibile a partire da: .NET 9.0.

Metrica: dotnet.exceptions
Nome Tipo di strumento Unità (UCUM) Descrizione
dotnet.exceptions Contatore {exception} Numero di eccezioni generate nel codice gestito.
Attributo Tipo Descrizione Esempi Presenza
error.type string Tipo di eccezione generato. System.OperationCanceledException; Contoso.MyException Required

Questa metrica segnala gli stessi valori del conteggio delle chiamate all'evento AppDomain.FirstChanceException .

Disponibile a partire da: .NET 9.0.