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
Systèmes d'exploitation pris en charge
Le capteur « Java » prend en charge les systèmes d'exploitation conformes aux exigences des agents hôtes, qui peuvent être consultées dans la section «Systèmes d'exploitation pris en charge» de chaque agent hôte, comme par exemple les systèmes d'exploitation pris en charge pour « Unix ».
Distributions et environnements d'exécution pris en charge d' Java
Pour plus d'informations sur les distributions et les environnements d'exécution pris en charge par Java, consultez la page « Distributions prises en charge par JVM ».
Frameworks et bibliothèques pris en charge pour le traçage
Le capteur « Java » intègre plusieurs frameworks et bibliothèques dédiés au traçage. Pour plus d'informations, consultez la section « Frameworks et bibliothèques instrumentés ». Pour le moteur d'exécution obsolète d' Java e 6, voir Cadres et bibliothèques instrumentés pour le moteur d'exécution obsolète d' Java e 6
Configuration système requise
Avant d'installer l'agent d' Instana, assurez-vous que la configuration système requise est respectée. Pour plus d'informations, consultez la section « Configuration requise ».
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.
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 :
- Données de configuration
- Métriques de performance
- Signatures d'intégrité
- Métriques personnalisées
- Autres métriques
Pour afficher ces métriques, procédez comme suit:
- Dans la barre latérale de l'interface utilisateur d' Instana, sélectionnez « Infrastructure ».
- 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 |
- `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é:
Kit SDK Java Trace
Si vous souhaitez intégrer un framework qui n'est pas encore pris en charge par Instana, ou surveiller les requêtes d'une application personnalisée, utilisez le SDK de traçage Java et consultez le dépôt GitHub.
Avant de mettre en œuvre le traçage personnalisé à l'aide du SDK, consultez les bonnes pratiques en matière de traçage.
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.
Java OpenTracing API
Pour collecter les traces décrites sur le site OpenTracing API, vous devez utiliser Java OpenTracing. Pour plus d'informations, consultez le site OpenTracing.
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.
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.
Traitement des incidents
Vous pourriez rencontrer des problèmes de surveillance avec Instana. Pour plus d'informations, voir Identification des incidents.