2009-02-12 5 views
150

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

+1

C'est le dossier actuel, je suppose. –

Répondre

204

Voici ce que Oracle's documentation a à dire:

Par défaut, le vidage de 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 un répertoire avec l'option -XX:HeapDumpPath=. Pour l'exemple -XX:HeapDumpPath=/disk2/dumps provoquera le vidage de tas généré dans le répertoire /disk2/dumps .

+14

Ceci liste également toutes les options liées aux performances de la machine virtuelle: http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp#PerformanceTuning –

+4

Important! Les indicateurs HeapDump sont disponibles uniquement à partir de Java 1.5.0_07. – rustyx

+11

Il est également important de reconnaître que la JVM ne remplacera PAS une pile de mémoire existante dans 'HeapDumpPath', vous verrez quelque chose de similaire à' "Impossible de créer /tmp/java_pidpid.hprof: Fichier existe" 'dans votre sortie standard. Assurez-vous de déplacer votre fichier de vidage hors du chemin de vidage pour libérer la place pour tous les futurs fichiers de vidage; et utiliser l'espace réservé '' dans le nom de fichier pour augmenter l'entropie dans le nom de fichier. – Ben

38

Vous pouvez afficher cette image à partir de la console UNIX.

Le chemin d'accès au tas de mémoire 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 voir la décharge de la console sur le chemin mentionné.

2

J'ai eu du mal à déchiffrer ce que l'on entend par "répertoire de travail de la machine virtuelle". 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 wrapper, par ex. 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.

1

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

Questions connexes