Utilisation du paramètre HeapDumpOnOutOfMemoryError pour le vidage du tas pour JBoss

On m’a dit que je pouvais append le paramètre -XX:+HeapDumpOnOutOfMemoryError à mes options de démarrage de la JVM sur mon script de démarrage JBoss pour obtenir un vidage du tas lorsque nous recevons une erreur de mémoire insuffisante dans notre application. Je me demandais où ces données sont vidées? Est-ce juste à la console ou à un fichier journal? Si c’est juste pour la console, que se passe-t-il si je ne suis pas connecté au serveur Unix via la console?

Voici ce que la documentation d’Oracle a à dire:

Par défaut, le vidage du tas est créé dans un fichier appelé java_ pid .hprof dans le répertoire de travail de la machine virtuelle, comme dans l’exemple ci-dessus. Vous pouvez spécifier un autre nom de fichier ou répertoire avec l’option -XX:HeapDumpPath= . Par exemple, -XX:HeapDumpPath=/disk2/dumps provoquera la génération du /disk2/dumps dans le /disk2/dumps .

Vous pouvez afficher cette sauvegarde depuis la console UNIX.

Le chemin du vidage du tas sera fourni sous la forme d’une variable juste après l’endroit où vous avez placé la variable mentionnée.

Par exemple:

 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps" 

Vous pouvez afficher le vidage de la console sur le chemin mentionné.

J’ai eu du mal à déchiffrer ce que l’on entend par “répertoire de travail de la VM”. Dans mon exemple, j’utilisais le programme Java Service Wrapper pour exécuter un jar – les fichiers de vidage ont été créés dans le répertoire où j’avais placé le programme wrapper, par exemple c: \ myapp \ bin. La raison pour laquelle j’ai découvert cela est que les fichiers peuvent être assez volumineux et ils ont rempli le disque dur avant de découvrir leur emplacement.

Si vous n’utilisez pas l’option “-XX: HeapDumpPath”, dans le cas de JBoss EAP / As par défaut, le fichier de vidage du tas sera généré dans le répertoire “JBOSS_HOME / bin”.