Maison  >  Article  >  Java  >  Vidage du tas Java

Vidage du tas Java

WBOY
WBOYoriginal
2024-08-30 15:14:19823parcourir

En Java, un tas dump donne un instantané de l'ensemble des objets présents dans la mémoire de la Machine Virtuelle Java à un moment donné. Les vidages de tas sont utiles pour résoudre les problèmes de fuite de mémoire et optimiser l'utilisation de la mémoire dans différentes applications Java. Les détails de chaque instance comme l'adresse, le nom de classe, le type, les références à un autre objet sont notés dans le vidage du tas. Le vidage du tas a deux formats, tels que le format Portable Heap Dump, un format binaire et classique en texte asci. Dans les sections ci-dessous, voyons différents outils et techniques pour générer un vidage de tas.

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

Formats de vidage du tas

  • Format Portable Heap Dump (PHD) : Dans ce format, le fichier dump se compose d'une section d'en-tête ainsi que d'une section de corps. La section corps du fichier de vidage contient des détails sur les objets, les enregistrements de classe ou les tableaux. Pour expliquer le format de fichier, des nombres primitifs sont utilisés.
  • Format Heap Dump classique : Ces formats de dump sont générés en texte ASCII sur presque toutes les plateformes sauf z/OS, qui sont encodés en EBCDIC.

Pourquoi le Heap dump est-il utilisé et à quoi sert-il ?

Normalement, ce vidage de tas est utilisé dans l'application Java que nous utilisons, elle occupe plus de mémoire que prévu, ou l'application plante avec l'erreur OutOfMemoryError. Si nous analysons le vidage du tas, cela aidera à identifier la cause première de l'anomalie. En plus de cela, le vidage de tas peut également être utilisé pour identifier des détails tels que l'utilisation de la mémoire de chaque classe, le nombre d'objets dans chaque classe, etc. De plus, des détails fins peuvent être capturés et la quantité de mémoire utilisée par un individu. Les objets Java présents dans l'application peuvent également être découverts. Ces informations peuvent nous aider à identifier le code réel à l'origine des problèmes de fuite de mémoire.

Outils et techniques

Voici les outils et techniques suivants mentionnés ci-dessous

1. Outils JDK

Les Heap Dumps peuvent être capturés à l'aide de différents outils sous JDK, qui sont disponibles dans le dossier bin du répertoire personnel du JDK. Pour cela, la ligne de commande peut être utilisée puisque le répertoire est présent dans le chemin système.

jmap

jmap est un outil qui peut être utilisé dans des processus locaux ou distants qui impriment des statistiques de mémoire dans une JVM en cours d'exécution.

Pour générer un tas dump avec un jmap, l'option dump peut être utilisée comme indiqué ci-dessous.

jmap -dump:[live] , format = b , file=< path of the file > <process id>
  • live : Paramètre facultatif. Les objets avec des références actives uniquement seront imprimés si ceci est défini
  • format=b: Mentionne que le format du fichier de vidage sera au format binaire.
  • fichier : Le fichier dans lequel le dump créé peut être écrit
  • PID : ID du processus Java
  • jcmd

jcmd est un outil qui envoie les requêtes de commande à la machine virtuelle Java. De plus, celui-ci doit être présent sur la machine sur laquelle le processus Java est exécuté.

Pour obtenir le vidage du tas, la commande GC.heap_dump peut être utilisée là où le pid et le chemin du fichier de sortie doivent uniquement être mentionnés, comme indiqué ci-dessous.

jcmd < pid > GC.heap_dump < path of the file >
JVisualVM

JVisualVM est un outil doté d'une interface utilisateur graphique simple et intuitive qui nous permet de surveiller, de dépanner et de profiler les applications Java. Pour générer un vidage de tas à l'aide de cela, vous devez cliquer avec le bouton droit sur le processus Java et sélectionner l'option « Heap Dump ». Une fois cela fait, l'outil créera un vidage de tas et il s'ouvrira dans un nouvel onglet.

2. Création automatique de tas dump

Au lieu d'utiliser les techniques manuelles mentionnées ci-dessus, une option de ligne de commande, HeapDumpOnOutOfMemoryError, est utilisée pour créer automatiquement le vidage du tas lorsqu'un java.lang.OutOfMemoryError est lancé :

java - XX:+HeapDumpOnOutOfMemoryError

java_pid.hprof est le fichier qui stocke le dump par défaut, et il est disponible dans le répertoire où l'application est exécutée.

Au lieu du chemin par défaut, d'autres chemins de fichiers peuvent également être utilisés, et pour cela, l'option HeapDumpPath peut être utilisée, comme indiqué ci-dessous.

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=< file_path >

Ainsi, lorsque l'application exécute une panne de mémoire de cette manière, les journaux peuvent être vus dans le fichier créé qui consiste en un vidage de tas :

3. JMX

En cela, HotSpotDiagnostic MBean est utilisé pour générer une technique dumpHeap qui autorise 2 paramètres.

Ils sont :

outputFile, qui est le chemin du fichier pour le dump créé. Assurez-vous que le fichier doit avoir une extension hprof.

live, qui est similaire à celui de jmap. Les objets avec des références actives uniquement seront imprimés si ceci est défini

Voyons deux techniques différentes pour invoquer cette méthode de capture d'un vidage de tas.

JConsole

Le client JMX comme JConsole est le moyen le plus simple d'utiliser le MBean HotSpotDiagnostic. Si JConsole est ouvert et connecté à un processus Java en cours d'exécution, accédez à l'onglet MBeans et identifiez le HotSpotDiagnostic présent sous com.sun.management. À l’intérieur des opérations, la méthode dumpHeap expliquée précédemment peut être trouvée. Pour effectuer l'opération dumpHeap, les paramètres OutputFile et Live sont les champs de texte p0 et p1.

Méthode programmatique

Semblable à JConsole, HotSpotDiagnostic MBean peut être utilisé en l'appelant via un programme à partir du code Java. Pour cela, une instance MBeanServer doit obtenir un MBean enregistré dans l'application. Une fois cette opération terminée, une instance de HotSpotDiagnosticMXBean est nécessaire et la méthode dumpHeap de cette instance doit être appelée.

4. Console d'administration IBM

Supposons que l'application que vous utilisez s'exécute sur IBM Websphere Application Server ; la console d'administration peut générer des tas. Tout d'abord, dans le volet de navigation de la console d'administration, sélectionnez Dépannage, puis choisissez Sauvegardes et cœurs Java. Une fois cela fait, sélectionnez le nom du serveur pour celui qui doit créer le vidage du tas. Après cela, cliquez sur Heap dump pour créer le tas pour le serveur mentionné. wsadmin peut également être utilisé pour créer des vidages de tas.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Convertisseurs JSFArticle suivant:Convertisseurs JSF