Réaliser un Heap Dump d’un process Java sous Linux

Qu’est qu’un Heap Dump d’un process Java

Il peut arriver qu’une webapp Tomcat parte en « live » pour d’étranges raisons. Dans ce cas, il convient de faire un heap dump de la mémoire du process Java.
Voici le script que j’utilise pour avoir le maximum d’info lorsque le process part dans les tours et qui redémarre Tomcat.

#!/bin/bash
DATE=`date +"%y%m%d_%Hh%M"`
PID=`pidof java`
HOSTNAME=`hostname | cut -d "." -f 1 | tr "[:lower:]" "[:upper:]"`
DUMP_FILE="/data/HeapDump_${HOSTNAME}_${DATE}.hprof"

kill -3 ${PID}
/usr/java/latest/bin/jmap -F -dump:format=b,file=${DUMP_FILE} ${PID}
service tomcat stop
mv /var/log/tomcat/catalina.out /var/log/tomcat/catalina_${DATE}
service tomcat start
gzip ${DUMP_FILE}

Le ‘kill -3‘ permet de « dumper » les threads et les stacks en cours sur la sortie standard. Dans notre cas, c’est le fichier catalina.out qui la reçoit.
Une Stack énorme ou avec de nombreux « Lock » peut nous aiguiller sur le problème.

La commande ‘jmap‘ permet de récupérer un fichier contenant la totalité des objets présents en mémoire. Rapatriez ce fichier, dé-gézipé le et ouvrez le avec Eclipse Memory Analyser.

Ce dernier propose différents analyseurs pour vous aider à mettre le doigt sur votre problème.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *