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
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.
Voici les outils et techniques suivants mentionnés ci-dessous
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 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>
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 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.
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
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 :
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.
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.
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.
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!