Métriques du runtime .NET
Cet article décrit les métriques intégrées pour les bibliothèques runtime .NET produites à l’aide de l’API System.Diagnostics.Metrics . Pour obtenir une liste des métriques basées sur l’ancienne API EventCounters, consultez Compteurs disponibles.
Conseil
Pour plus d’informations sur la collecte et le rapport de ces métriques, consultez Collecte de métriques.
System.Runtime
Le System.Runtime
compteur signale les mesures du GC, JIT, AssemblyLoader, Threadpool et des parties de gestion des exceptions du runtime .NET, ainsi que certaines métriques processeur et mémoire du système d’exploitation. Ces métriques sont disponibles automatiquement pour toutes les applications .NET.
Métrique : dotnet.process.cpu.time
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.process.cpu.time |
Compteur | s |
Temps processeur utilisé par le processus. |
Attribut | Type | Description | Exemples | Présence |
---|---|---|---|---|
cpu.mode |
string | Mode de l’UC. | user ; system |
Toujours |
Cette métrique signale les mêmes valeurs que l’accès aux propriétés System.Diagnostics.Process de temps processeur pour le processus actuel. Le system
mode correspond à PrivilegedProcessorTime et user
le mode correspond à UserProcessorTime
Disponible à partir de : .NET 9.0.
Métrique : dotnet.process.memory.working_set
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.process.memory.working_set |
UpDownCounter | By |
Nombre d’octets de mémoire physique mappée au contexte de processus. |
Cette métrique signale les mêmes valeurs que la propriété appelante Environment.WorkingSet .
Disponible à partir de : .NET 9.0.
Métrique : dotnet.gc.collections
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.gc.collections |
Compteur | {collection} |
Nombre de garbage collections qui se sont produites depuis le début du processus. |
Attribut | Type | Description | Exemples | Présence |
---|---|---|---|---|
dotnet.gc.heap.generation |
string | Nom de la génération maximale de tas managée collectée. | gen0 ; gen1 ; ; gen2 |
Toujours |
Le gc .NET est un garbage collector générationnel. Chaque fois que le garbage collector s’exécute, il utilise des heuristiques pour sélectionner une génération maximale, puis collecte les objets de toutes les générations jusqu’au maximum sélectionné. Par exemple, une gen1
collection collecte tous les objets des générations 0 et 1. Une gen2
collection collecte tous les objets de générations 0, 1 et 2. Pour plus d’informations sur le garbage collection .NET et le garbage collection générationnel, consultez le guide du garbage collection .NET.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.gc.heap.total_allocated
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.gc.heap.total_allocated |
Compteur | By |
Nombre approximatif d’octets alloués sur le tas gc managé depuis le démarrage du processus. La valeur retournée n’inclut aucune allocation native. |
Cette métrique signale les mêmes valeurs que l’appel GC.GetTotalAllocatedBytes. Pour plus d’informations sur .NET GC, consultez le guide du garbage collection .NET.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.gc.last_collection.memory.committed_size
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.gc.last_collection.memory.committed_size |
UpDownCounter | By |
Quantité de mémoire virtuelle validée en cours d’utilisation par le gc .NET, comme indiqué lors du dernier garbage collection. |
Cette métrique signale les mêmes valeurs que l’appel GCMemoryInfo.TotalCommittedBytes. La mémoire virtuelle validée peut être supérieure à la taille du tas, car elle inclut à la fois la mémoire pour le stockage d’objets existants (la taille du tas) et une mémoire supplémentaire prête à gérer les objets nouvellement alloués à l’avenir. Pour plus d’informations sur .NET GC, consultez le guide du garbage collection .NET.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.gc.last_collection.heap.size
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.gc.last_collection.heap.size |
UpDownCounter | By |
Taille du tas GC managé (y compris la fragmentation), comme indiqué lors du dernier garbage collection. |
Attribut | Type | Description | Exemples | Présence |
---|---|---|---|---|
dotnet.gc.heap.generation |
string | Nom de la génération de tas managée du garbage collector. | gen0 ; gen1 ; ;loh ; ; ; gen2 poh |
Toujours |
Le gc .NET divise le tas en générations. En plus des générations numérotées standard, le GC met également des objets en deux générations spéciales :
- Le tas d’objets volumineux (LOH) stocke les objets .NET très volumineux par rapport aux objets classiques.
- Le tas d’objets épinglé stocke les objets alloués à l’aide de l’API GC.AllocateArray lorsque le paramètre a la
pinned
valeur true.
Ces deux générations spéciales sont collectées pendant gen2
les collections gc. Pour plus d’informations sur le gc .NET, consultez le guide du garbage collection .NET.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.gc.last_collection.heap.fragmentation.size
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.gc.last_collection.heap.fragmentation.size |
UpDownCounter | By |
Fragmentation du tas, comme indiqué lors du dernier garbage collection. |
Cette métrique signale les mêmes valeurs que l’appel GCGenerationInfo.FragmentationAfterBytes.
Lorsque les objets .NET sont alloués, ils ont tendance à être disposés de manière contiguë en mémoire. Toutefois, si certains de ces objets sont collectés ultérieurement par le GC, cela crée des lacunes de mémoire inutilisée entre les objets actifs qui restent. Ces lacunes représentent la partie du tas GC qui n’est pas actuellement utilisée pour stocker des objets, souvent appelée « fragmentation ». Le GC peut réutiliser les octets de fragmentation à l’avenir pour les nouvelles allocations d’objets si la taille de l’objet est suffisamment petite pour s’adapter à l’une des lacunes. Le GC peut également effectuer un garbage collection de compactage spécial qui déplace les objets vivants restants à côté des autres tant que les objets n’ont pas été épinglés en place.
Pour plus d’informations sur le fonctionnement du GC .NET, l’analyse des performances du GC et la fragmentation des rôles, consultez l’analyse des performances de la mémoire .NET.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.gc.pause.time
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.gc.pause.time |
Compteur | s |
Durée totale suspendue dans GC depuis le démarrage du processus. |
Cette métrique signale les mêmes valeurs que l’appel GC.GetTotalPauseDuration().
Chaque fois que le gc .NET effectue une collection, il doit brièvement suspendre tous les threads exécutant du code managé pour déterminer quels objets sont toujours référencés. Cette métrique signale la somme de toutes ces pauses depuis le début du processus. Vous pouvez utiliser cette métrique pour déterminer quelle fraction de temps les threads passent suspendus pour GC par rapport au temps qu’ils sont en mesure d’exécuter du code managé.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.jit.compiled_il.size
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.jit.compiled_il.size |
Compteur | By |
Nombre d’octets de langage intermédiaire compilés depuis le démarrage du processus. |
Cette métrique signale les mêmes valeurs que l’appel JitInfo.GetCompiledILBytes.
Lorsque vous générez une application .NET, le code managé est initialement compilé à partir d’un langage de haut niveau tel que C#, VB ou F# en langage intermédiaire (IL). Ensuite, lorsque le programme est exécuté, le compilateur juste-à-temps (JIT) .NET convertit l’il en code machine.
Étant donné que la compilation JIT se produit la première fois qu’une méthode s’exécute, la plupart de la compilation JIT a tendance à se produire au démarrage de l’application. La réduction de la quantité d’il compilée par JIT peut améliorer le temps de démarrage de l’application.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.jit.compiled_methods
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.jit.compiled_methods |
Compteur | {method} |
Nombre de fois où le compilateur JIT (re)compilé des méthodes depuis le début du processus. |
Cette métrique signale les mêmes valeurs que l’appel JitInfo.GetCompiledMethodCount.
Lorsque vous générez une application .NET, le code managé est initialement compilé à partir d’un langage de haut niveau tel que C#, VB ou F# en langage intermédiaire (IL). Ensuite, lorsque le programme est exécuté, le compilateur juste-à-temps (JIT) .NET convertit l’il en code machine.
Étant donné que la compilation JIT se produit la première fois qu’une méthode s’exécute, la plupart de la compilation JIT a tendance à se produire au démarrage de l’application. La réduction du nombre de méthodes qui doivent être compilées par JIT peut améliorer le temps de démarrage de l’application.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.jit.compilation.time
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.jit.compilation.time |
Compteur | s |
Durée pendant laquelle le compilateur JIT a passé la compilation des méthodes depuis le démarrage du processus. |
Cette métrique signale les mêmes valeurs que l’appel JitInfo.GetCompilationTime.
Lorsque vous générez une application .NET, le code managé est initialement compilé à partir d’un langage de haut niveau tel que C#, VB ou F# en langage intermédiaire (IL). Ensuite, lorsque le programme est exécuté, le compilateur juste-à-temps (JIT) .NET convertit l’il en code machine.
Étant donné que la compilation JIT se produit la première fois qu’une méthode s’exécute, la plupart de la compilation JIT a tendance à se produire au démarrage de l’application. La réduction du temps passé par la compilation JIT peut améliorer le temps de démarrage de l’application.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.thread_pool.thread.count
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.thread_pool.thread.count |
UpDownCounter | {thread} |
Nombre de threads de pool de threads qui existent actuellement. |
Cette métrique signale les mêmes valeurs que l’appel ThreadPool.ThreadCount.
.NET utilise un pool de threads pour planifier des éléments de travail sur d’autres threads. Cette métrique fournit le nombre de threads de travail actuellement gérés par ce pool de threads.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.thread_pool.work_item.count
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.thread_pool.work_item.count |
Compteur | {work_item} |
Nombre d’éléments de travail que le pool de threads a terminé depuis le démarrage du processus. |
Cette métrique signale les mêmes valeurs que l’appel ThreadPool.CompletedWorkItemCount.
.NET utilise un pool de threads pour planifier des éléments de travail sur d’autres threads. Cette métrique fournit le nombre d’éléments de travail qui ont été exécutés par les threads du pool de threads.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.thread_pool.queue.length
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.thread_pool.queue.length |
UpDownCounter | {work_item} |
Nombre d’éléments de travail actuellement mis en file d’attente à traiter par le pool de threads. |
Cette métrique signale les mêmes valeurs que l’appel ThreadPool.PendingWorkItemCount.
.NET utilise un pool de threads pour planifier des éléments de travail sur d’autres threads. Cette métrique fournit le nombre d’éléments de travail actuellement mis en file d’attente à exécuter par l’un des threads du pool de threads.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.monitor.lock_contentions
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.monitor.lock_contentions |
Compteur | {contention} |
Nombre de fois où il y avait des conflits lors de la tentative d’acquisition d’un verrou de surveillance depuis le démarrage du processus. |
Cette métrique signale les mêmes valeurs que l’appel Monitor.LockContentionCount.
.NET prend en charge l’utilisation de n’importe quel objet managé en tant que verrou, avec des API telles que Monitor.Enter ou avec l’instruction lock. Si un thread contient déjà un verrou pendant qu’un deuxième thread tente de l’acquérir, il s’agit de la contention de verrou.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.timer.count
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.timer.count |
UpDownCounter | {timer} |
Nombre d’instances de minuteur actuellement actives. |
Cette métrique signale les mêmes valeurs que l’appel Timer.ActiveCount.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.assembly.count
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.assembly.count |
UpDownCounter | {assembly} |
Nombre d’assemblys .NET actuellement chargés. |
Cette métrique signale les mêmes valeurs que l’appel AppDomain.GetAssemblies() , puis vérifie la longueur du tableau retourné.
Disponible à partir de : .NET 9.0.
Métrique : dotnet.exceptions
Nom | Type d’instrument | Unité (UCUM) | Description |
---|---|---|---|
dotnet.exceptions |
Compteur | {exception} |
Nombre d’exceptions levées dans le code managé. |
Attribut | Type | Description | Exemples | Présence |
---|---|---|---|---|
error.type |
string | Type d’exception qui a été levée. | System.OperationCanceledException ; Contoso.MyException |
Required |
Cette métrique signale les mêmes valeurs que le comptage des appels à l’événement AppDomain.FirstChanceException .
Disponible à partir de : .NET 9.0.