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.