On m'a dit que je pouvais ajouter le paramètre -XX:+HeapDumpOnOutOfMemoryError
aux options de démarrage de ma machine virtuelle Java à mon script de démarrage JBoss pour obtenir un vidage de tas lorsque nous obtenons une erreur de mémoire insuffisante dans notre application. Je me demandais où ces données sont déversées? Est-ce juste pour la console ou pour un fichier de log? Si c'est juste pour la console, 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 de segment de mémoire est créé dans un fichier nommé 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 un autre répertoire avec l'option
-XX:HeapDumpPath=
. Par exemple,-XX:HeapDumpPath=/disk2/dumps
entraînera la génération du tas dans le répertoire/disk2/dumps
.
Vous pouvez afficher ce vidage à partir de la console UNIX.
Le chemin d'accès au vidage de tas sera fourni en tant que 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 à partir 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 fichier jar. Les fichiers de vidage étaient créés dans le répertoire où j'avais placé le programme d'encapsulation, par exemple. c:\myapp\bin. La raison pour laquelle j'ai découvert cela est que les fichiers peuvent être assez volumineux et qu'ils ont rempli le disque dur avant que je découvre leur emplacement.
Si vous n'utilisez pas l'option "-XX: HeapDumpPath", dans le cas de JBoss EAP/As, le fichier de vidage de segment de mémoire sera généré par défaut dans le répertoire "JBOSS_HOME/bin".