Surveillance d'une machine virtuelle d' Java ( JVM )

Vous pouvez surveiller de manière exhaustive votre machine virtuelle Java ( JVM ) à l'aide d' Instana afin d'identifier les goulots d'étranglement et d'optimiser les performances. Pour surveiller JVM, installez l'agent hôte Instana. Une fois l'agent installé, le capteur Instana Java s'active automatiquement et recueille des métriques en temps réel ainsi que des données de traçage que vous pouvez consulter dans l'interface utilisateur de Instana.

Le capteur « Java » offre une instrumentation automatisée du code pour les technologies prises en charge, une surveillance de l'état de santé sans configuration des instances d' JVM, ainsi que des traces de bout en bout des requêtes sur l'ensemble des systèmes.

Informations complémentaires

Le capteur « Java » prend en charge les langages, systèmes d'exploitation et environnements d'exécution suivants :

Langues prises en charge

Le capteur prend en charge les langues suivantes :

  • Clojure
  • Java
  • Kotlin
  • Scala

Installation de l'agent Instana

Pour surveiller JVM, vous devez installer l'agent hôte Instana. Pour plus d'informations, consultez la section « Installation des agents hôtes ». L'agent déploie, configure et installe automatiquement le capteur d' Java. Pour vous assurer que vos applications Java sont correctement configurées, vérifiez que votre distribution JVM est prise en charge.

Remarque : n'essayez pas d'utiliser simultanément des agents provenant de plusieurs fournisseurs. Vous pourriez obtenir des résultats imprévisibles susceptibles d'entraîner une défaillance de l'application. Pour plus d'informations, consultez la section « Agents incompatibles ».

Exclure les JVM de la surveillance

Pour empêcher l'agent Instana de se connecter à JVM, vous pouvez définir la variable INSTANA_IGNORE d'environnement sur true dans votre environnement JVM.

Facultatif : Configuration du capteur

Une fois l'agent « Instana » installé, le capteur « Java » est automatiquement installé et configuré. Bien que vous n'ayez pas besoin de configuration pour les métriques prêtes à l'emploi et le traçage distribué, vous pouvez configurer des composants individuels du détecteur.

Pour plus d'informations sur la configuration du capteur, consultez la section « Configuration d'un capteur d' Java ».

Une fois le capteur Java configuré, il commence automatiquement à collecter des métriques à partir de l' JVM. Vous pouvez consulter ces indicateurs dans l'interface utilisateur d' Instana. Le capteur « Java » prend également en charge d'autres fonctionnalités d' Instana, telles que le traçage automatique, le traçage personnalisé et le profilage automatique.

Collecte des métriques

Le capteur « Java » surveille l'instance d' JVM et en recueille les métriques suivantes :

Pour afficher ces métriques, procédez comme suit:

  1. Dans la barre latérale de l'interface utilisateur d' Instana, sélectionnez « Infrastructure ».
  2. Cliquez sur un hôte surveillé spécifique.

Le tableau de bord « JVM » affiche toutes les métriques collectées pour l'instance « JVM ».

Données de configuration

Le tableau suivant répertorie les données de configuration recueillies auprès de l'instance d' JVM :

Configuration Description
Version Java La version de l' Java utilisée par l' JVM
Environnement d'exécution Java L'implémentation de l'environnement d'exécution Java (JRE)
Segment de mémoire (max) Taille maximale du tas disponible pour l' JVM
Chemin d'accès aux classes Le paramètre « class path » défini dans le fichier « JVM »
Arguments JVM Les options de démarrage et les paramètres de configuration transmis à l' JVM
services Noms de services logiques identifiés et surveillés par Instana

Métriques de performance

Les indicateurs de performance suivants sont collectés à partir de l'instance d' JVM :

Métriques de mémoire

Le tableau suivant récapitule les indicateurs de mémoire utilisés pour mesurer l'utilisation de la mémoire dans l' JVM :

Métrique de performance Description Source de données Unités
Mémoire utilisée Mémoire totale actuellement utilisée par l' JVM java.lang.Runtime#totalMemory Octets
Segment de mémoire Taille maximale du tas disponible pour l' JVM - Mémoire du tas utilisée : différence entre java.lang.Runtime#totalMemory et java.lang.Runtime#freeMemory. - Taille maximale du tas : déterminée par l'analyse du -Xmx paramètre de ligne de commande ou extraite de java.lang.Runtime#maxMemory. - Pourcentage de mémoire du tas utilisée : (Mémoire du tas utilisée / Mémoire totale du tas) * 100 java.lang.Runtime Méthodes Octets ou pourcentage (%)
Pool de mémoire Utilisation de la mémoire des pools « heap » et « non-heap », représentée sous forme de graphique sur une période donnée ManagementFactory#getMemoryPoolMXBeans Octets
En cours d'utilisation Taille de la mémoire heap actuellement utilisée par l' JVM (utilisation et taux d'utilisation) java.lang.management.MemoryUsage Utilisation : MiB Taux d'utilisation : pourcentage (%)
Piscine Nom de la zone mémoire gérée par l' JVM ManagementFactory#getMemoryPoolMXBeans
Les premières années Taille initiale de la mémoire allouée au démarrage d' JVM getInit Octets
Max Taille maximale de mémoire que l' JVM e peut allouer à ce pool getMax Octets
Valeur Quantité de mémoire actuellement utilisée getUsage Octets

Indicateurs de Threads

Le tableau suivant résume les informations relatives aux indicateurs des threads :

Métrique de performance Description Source de données Unités
Unités d'exécution Nombre de threads se trouvant dans différents états, tel qu'affiché sur un graphique pour une période donnée : new, runnable, timed-waiting, waiting, ou blocked java.lang.management.ThreadMXBean#getAllThreadIds Nombre
Nouveau Nombre de threads créés mais pas encore lancés ThreadMXBean#getThreadInfo Nombre
Exécutable / Mise en œuvre Nombre de threads prêts à s'exécuter et pouvant être traités par le processeur ThreadMXBean#getThreadInfo Nombre
Timed-Waiting Nombre de threads en attente pendant une durée spécifiée ThreadMXBean#getThreadInfo Nombre
En attente Nombre de threads en attente pendant une durée spécifiée ThreadMXBean#getThreadInfo Nombre
Bloqué Nombre de threads bloqués en attente d'un verrou ThreadMXBean#getThreadInfo Nombre

Indicateurs relatifs au ramassage des ordures (GC)

Le tableau suivant résume les informations relatives aux indicateurs de collecte des déchets :

Métrique de performance Description Source de données Unité
Récupération de place (GC) Activation du ramasse-miettes et valeurs d'exécution représentées sous forme de graphique sur une période donnée - Informations sur le ramassage des ordures : ManagementFactory#getGarbageCollectorMXBeans - Valeurs du graphe : java.lang.management.GarbageCollectorMXBean
PS : Temps de récupération Durée totale consacrée au GC dans la région de Young (Eden + Survivor) (GC mineur) getCollectionTime Millisecondes
P.S. : L'heure de l' MarkSweep Durée totale des collectes générales dans l'ancienne région (collectes générales majeures) getCollectionTime Millisecondes
Appels de récupération PS Nombre de cycles de GC mineurs getCollectionCount Nombre
PS : Appels de l' MarkSweep Nombre de cycles de chromatographie en phase gazeuse (GC) importants getCollectionCount Nombre
Remarque :
  • `getCollectionTime` et les valeurs d' `getCollectionCount` s correspondent à la dérivée calculée sur un intervalle d' 1‑second.
  • `getCollectionTime` correspond au temps écoulé, en millisecondes, pour l'ensemble des opérations de ramasse-miettes.
  • `getCollectionCount` c'est le nombre d'appels.

Métriques d'application

Le tableau suivant résume les informations relatives aux indicateurs de performance des applications :

Métrique de performance Description Source de données Unité
Suspension / Interruption Retard dans le temps d'exécution de l'application dû à l' JVM e, au système d'exploitation ou à la planification du processeur au cours de la dernière seconde. Calculé conformément au fil de discussion sur la mesure de l' Instana s dans l'application. Millisecondes

Indicateurs dérivés

Le tableau suivant répertorie les indicateurs disponibles dérivés des indicateurs de performance, qui sont calculés à partir d'une instance d' JVM :

Métriques de performance Description Source de données Nom de la métrique
Mémoire après le ramassage des ordures La quantité de mémoire utilisée par une application après un événement de collecte des déchets (GC). Lorsque le capteur « JVM » signale un déclenchement global du ramasse-miettes, la valeur de la mémoire à ce moment-là est utilisée pour indiquer la valeur «Memory After GC». Statistiques d'utilisation de la mémoire et événements de ramassage des ordures memory.gc.after
Mémoire avant le ramasse-miettes La quantité de mémoire utilisée par une application avant qu'un événement de ramassage des ordures (GC) ne se produise. Lorsque le capteur « JVM » signale un déclenchement global du ramasse-miettes, la valeur de mémoire enregistrée juste avant ce déclenchement est utilisée pour indiquer la valeur «Memory Before GC». Statistiques d'utilisation de la mémoire et événements de ramassage des ordures memory.gc.before
Pourcentage de mémoire après le GC La part de la mémoire totale disponible qu'une application utilise après un événement de ramassage des ordures (GC). Il s'agit du pourcentage de mémoire utilisée après un ramassage général des déchets, par rapport à la mémoire maximale utilisée par l' JVM. Statistiques de performance relatives à l'utilisation de la mémoire, mémoire maximale utilisée et statistiques sur le ramassage des ordures memory.gc.afterPercentage
Pourcentage de mémoire avant le ramasse-miettes La part de la mémoire totale disponible qu'une application utilise avant un événement de ramassage des ordures (GC). Il s'agit du pourcentage de mémoire utilisée avant un ramassage général des déchets, par rapport à la mémoire maximale utilisée par l' JVM. Statistiques de performance relatives à l'utilisation de la mémoire, mémoire maximale utilisée et statistiques sur le ramassage des ordures memory.gc.beforePercentage

Signatures d'intégrité

Chaque capteur possède une base de connaissances organisée de signatures de santé qui sont évaluées en continu par rapport aux métriques entrantes. Ces signatures de santé sont utilisées pour signaler des problèmes ou des incidents qui dépendent de l'impact sur l'utilisateur.

Les événements intégrés déclenchent des problèmes ou des incidents en fonction de signatures de santé défaillantes sur des entités, tandis que les événements personnalisés déclenchent des problèmes ou des incidents en fonction des seuils d'une métrique spécifique à une entité donnée.

Pour plus d'informations sur les événements intégrés du capteur « Java », consultez le guide de référence des événements intégrés.

Métriques personnalisées

Instana prend en charge certaines bibliothèques courantes de mesures d' Java. Si vous utilisez les bibliothèques suivantes, vous pouvez intégrer manuellement des éléments de suivi dans le code de votre application afin de collecter des métriques personnalisées :

Pour plus d'informations, consultez la section « Tracing personnalisé ».

Utilisation des indicateurs d' Dropwizard s pour la surveillance personnalisée d' JVM

Si l' JVM e la bibliothèque de métriques Dropwizard, les métriques personnalisées sont collectées et affichées sur le tableau de bord JVM. Pour empêcher toute surcharge du système de back-end, il existe une limite par défaut fixée à 200 métriques.

Pour désactiver ou modifier la limite des métriques collectées, utilisez la configuration suivante :

com.instana.plugin.java:
  dropwizardMetricCollection:
    enabled: false
    limit: 200
 

Si vous utilisez les métriques d' Dropwizard dans le cadre de l' Dropwizard, consultez la section « Surveillance » Dropwizard.

Autres métriques

Outre les métriques de configuration, de performances et personnalisées, le capteur « Java » recueille également d'autres métriques, telles que les vidages de threads et de tas en temps réel.

Cliché d'unités d'exécution actives

Pour afficher un cliché des unités d'exécution actives pour la machine virtuelle Java, cliquez sur Obtenir un cliché d'unité d'exécution (Get Thread Dump)

Cliché de segment de mémoire

Pour créer un cliché de segment de mémoire pour la machine virtuelle Java, cliquez sur Obtenir un cliché de segment de mémoire (Get Heap Dump). Pour enregistrer le vidage de la mémoire, indiquez un emplacement local sur l' JVM.

Suivi des demandes d' Java

Le capteur « Java » de Instana utilise les méthodes suivantes pour suivre les applications Java :

  • Instana AutoTrace : traçage automatique des applications d' Java, sans nécessiter de configuration manuelle ni de modification du code.
  • Tracé personnalisé : instrumentation manuelle de certaines parties du code de l'application d' Java s afin de collecter des métriques personnalisées et d'obtenir des informations plus détaillées.
  • Instana AutoProfile : le profilage automatique des applications d' Java s fournit des informations détaillées sur les performances, l'utilisation du processeur, l'allocation de mémoire et d'autres ressources système.

Instana AutoTrace

Par défaut, le capteur « Java » surveille toutes les requêtes et crée automatiquement une trace distribuée pour chacune d'entre elles. Cette trace distribuée prend en charge le traçage inter-hôtes et inter-langages. Pour plus d'informations, consultez les pages Instana et AutoTrace™.

Vous pouvez consulter ces traces dans l'interface utilisateur d' Instana. Pour plus d'informations, consultez la section « Analyse des traces et des appels ».

Journalisation

Vous ne pouvez consulter que les journaux de niveau WARN et supérieurs.

Lorsque l'on utilise Log4j, Log4j2 ou Logback pour permettre une corrélation plus précise entre la journalisation et le traçage, Instana remplit automatiquement le contexte de diagnostic mappé (MDC) avec l'identifiant de trace. Le nom de la variable MDC est instana.trace.id. Pour plus d'informations sur l'utilisation des environnements de capture de consignation dans les chaînes de format, voir la documentation de votre environnement de capture de consignation.

Traçage personnalisé

Le capteur « Java » offre une instrumentation de traçabilité entièrement automatisée et prête à l'emploi. Mais dans certains cas, vous préférerez peut-être envoyer des traces personnalisées vers votre tableau de bord Instana. Vous pouvez utiliser les méthodes suivantes pour implémenter le traçage personnalisé:

SDK Java Trace basé sur la configuration

Vous pourriez vous retrouver dans des situations où l'utilisation du SDK de traçage d' Java, qui nécessite de modifier le code source ou de faire appel à une personne capable de le faire, n'est ni possible ni souhaitable. Dans ces cas, utilisez le SDK de traçage « Java » basé sur la configuration. Bien qu'il soit moins riche en fonctionnalités que le SDK de traçage « programmatique » Java, le SDK de traçage « basé sur la configuration » Java permet une configuration déclarative des segments et des balises qui couvre de nombreux cas d'utilisation courants.

Avant de mettre en œuvre le traçage personnalisé à l'aide du SDK de traçage Java basé sur la configuration, consultez les bonnes pratiques en matière de traçage.

Exportateur de trace OpenCensus d'Instana

Instana fournit un exportateur de traces d' OpenCensus s pour les applications écrites en Java. En utilisant les processus de l'agent « Instana » comme proxy, « Instana » transfère vers son backend les traces exportées par les applications instrumentées avec Census.

Pour plus d'informations, consultez la rubrique « Exportateurs » du site OpenCensus.

Important : désactivez le traçage automatique ( InstanaAutoTrace™ ) si l'agent est utilisé sur le même hôte que Census. Pour plus d'informations, consultez la section « Désactivation de l'instrumentation de trace d' Java ».

Instana AutoProfile

Les profils sont essentiels pour localiser les problèmes de performances et les goulets d'étranglement au niveau du code. Ils contribuent à réduire la consommation de ressources et à améliorer les performances.

Instana AutoProfile™ génère et transmet des profils de processus à Instana. Contrairement aux profileurs utilisés en phase de développement ou à la demande, qui nécessitent de lancer manuellement le profilage, l' AutoProfile™ planifie automatiquement et effectue en continu un profilage adapté aux environnements de production critiques.

Pour plus d'informations, consultez Instana AutoProfile™.

À l'exclusion des JVM

Vous pouvez définir la variable INSTANA_IGNORE d'environnement sur true dans votre environnement d' JVM afin d'empêcher l'association de l'agent Instana à JVM.