Java Virtual Machine (JVM) génère 3 artefacts critiques qui sont utiles pour optimiser les performances et résoudre les problèmes de production. Ces artefacts sont :

  1. Journal de récupération de place (GC)
  2. Vidage du fil
  3. Vidage de tas

1. Journal de collecte des ordures

a) Qu’est-ce qu’un journal GC ?

Le journal GC contient des informations relatives aux événements de récupération de place. Il indiquera le nombre d’événements GC exécutés, le type de cette commande d’événements GC (c’est-à-dire Young GC ou Full GC), combien de temps chaque événement GC a mis l’application en pause, combien d’objets chaque événement GC a récupéré.

b) À quoi ressemble un journal GC ?

Un exemple de fichier journal de récupération de place est disponible ici.

c) Où sont utilisés les journaux GC ?

Les journaux de récupération de place sont utilisés pour étudier les performances du GC et de la mémoire de l’application. Il est utilisé pour optimiser les temps de pause du GC, il est utilisé pour identifier la taille de mémoire optimale pour votre application, il est également utilisé pour résoudre les problèmes liés à la mémoire.

d) Comment générer un journal GC ?

Vous pouvez générer des journaux de récupération de place en transmettant les arguments JVM suivants :

Sur les versions Java jusqu’à 8 :

Sur la version Java à partir de 9 :

file-path : est l’emplacement où le fichier journal Garbage Collection sera écrit.

e) Comment comprendre un journal GC ?

Le format du journal de récupération de place varie en fonction du fournisseur de votre JVM (Oracle, HP, IBM, Azul, ..), de la version de Java (1.5, 5, 6, 7, 8, 9, 10, 11, 12,…), des ordures algorithme de collecte (Serial, Parallel, CMS, G1, Shenandoah, Z GC) et les arguments JVM que vous passez. Il n’y a donc pas de format standardisé disponible. Cependant, voici un didacticiel vidéo, qui tente de vous aider à comprendre le format de fichier journal GC.

f) Quels outils sont utilisés pour analyser un journal GC ?

Il existe plusieurs outils d’analyse des journaux de récupération de place. Certains des plus populaires sont donnés ici : GCeasy, IBM GC & Memory visualizer, HP JMeter, Google Garbage Cat

2. Vidage du fil

a) Qu’est-ce qu’un thread dump ?

Un vidage de thread est un instantané de tous les threads exécutés dans l’application à un moment donné. Il contient toutes les informations sur chaque thread de l’application, telles que l’état du thread, l’ID du thread, l’ID natif, le nom du thread, la trace de la pile et la priorité.

b) À quoi ressemble un vidage de thread ?

Un exemple de vidage de thread peut être trouvé ici.

c) Où utilise-t-on un vidage de thread ?

Les vidages de threads sont principalement utilisés pour résoudre les problèmes de production tels que les pics de processeur, l’absence de réponse dans l’application, les temps de réponse médiocres, les threads bloqués, la consommation de mémoire élevée.

d) Comment générer un thread dump ?

Les vidages de threads peuvent être capturés à partir de l’application en cours d’exécution à l’aide de 8 options différentes. L’option la plus courante pour effectuer un vidage de thread consiste à utiliser l’outil ‘jstack’. L’outil jstack est livré dans le dossier JDK_HOMEbin. Voici la commande que vous devez émettre pour capturer le thread dump :

pid : est l’ID de processus de l’application, dont le vidage de thread doit être capturé

file-path : est le chemin du fichier dans lequel le vidage de thread sera écrit.

e) Comment comprendre un thread dump ?

Voici une présentation vidéo qui donne un bon aperçu détaillé de la façon de comprendre les thread dumps.

f) Quels outils sont utilisés pour analyser un thread dump ?

Voici les outils d’analyse de thread dump les plus utilisés : fastThread, Samurai, IBM Thread & Monitor analyzer, Visual VM

3. Vidage de tas

a) Qu’est-ce qu’un vidage de tas ?

Un vidage de tas est un instantané de la mémoire de votre application à un moment donné. Il contient des informations telles que quels sont les objets en mémoire, quelles valeurs portent-ils, quelle est leur taille, à quels autres objets font-ils référence.

b) À quoi ressemble un vidage de tas ?

Un exemple de vidage de tas peut être trouvé ici. (Remarque : il sera au format binaire. Vous ne pouvez donc pas le lire).

c) Où un vidage de tas est-il utilisé ?

Les vidages de tas sont principalement utilisés pour résoudre les problèmes liés à la mémoire, OutOfMemoryError.

d) Comment générer un vidage de tas ?

Le vidage de tas peut être capturé à partir de l’application en cours d’exécution à l’aide de 7 options différentes. L’option la plus courante pour effectuer un vidage de tas consiste à utiliser l’outil ‘jmap’. L’outil jmap est livré dans le dossier JDK_HOMEbin. Voici la commande que vous devez émettre pour capturer :

pid : est l’ID de processus Java, dont le vidage de tas doit être capturé

file-path : est le chemin du fichier dans lequel le vidage du tas sera écrit.

e) Comment comprendre un vidage de tas ?

Les fichiers de vidage de tas sont au format binaire et ont tendance à être volumineux. En plus de cela, leur format manque cruellement de documentation. Ainsi, vous devez utiliser les outils d’analyse de vidage de tas (donnés dans la question suivante) pour les analyser et les comprendre.

f) Quels outils sont utilisés pour analyser un vidage de tas ?

Voici les outils d’analyse de vidage de tas les plus utilisés : Eclipse MAT, HeapHero, JVisualVM.
Nous espérons que cet article couvre toutes les méthodes pour analyser les journaux de nettoyage de la mémoire, les vidages de threads et les vidages de tas. Si vous avez trouvé cet article vraiment utile pour vous, veuillez partager cette information avec vos amis, parents, famille et autres. Rendez-vous dans les prochains articles avec signalfix.net!