Uso del parámetro HeapDumpOnOutOfMemoryError para el volcado de almacenamiento dinámico para JBoss


182

Me dijeron que puedo agregar el -XX:+HeapDumpOnOutOfMemoryErrorparámetro a mis opciones de inicio de JVM a mi script de inicio de JBoss para obtener un volcado del montón cuando recibimos un error de falta de memoria en nuestra aplicación. Me preguntaba dónde se descargan estos datos? ¿Es solo para la consola o para algún archivo de registro? Si es solo para la consola, ¿qué pasa si no estoy conectado al servidor Unix a través de la consola?


1
Esa es la carpeta actual, supongo.
Valentin Tihomirov

Respuestas:


246

Esto es lo que la documentación de Oracle tiene que decir:

Por defecto, el volcado del montón se crea en un archivo llamado java_ pid .hprof en el directorio de trabajo de la VM, como en el ejemplo anterior. Puede especificar un nombre de archivo o directorio alternativo con la -XX:HeapDumpPath=opción. Por ejemplo, se -XX:HeapDumpPath=/disk2/dumps generará el volcado del montón en el /disk2/dumps directorio.


16
Esto también enumera todas las opciones relacionadas con el rendimiento de VM: java.sun.com/javase/technologies/hotspot/…
Ravi Gupta

44
¡Importante! Los indicadores de HeapDump solo están disponibles en Java 1.5.0_07.
rustyx

14
También es importante reconocer que la JVM NO sobrescribirá un volcado de almacenamiento dinámico existente en el HeapDumpPath, verá algo similar "Unable to create /tmp/java_pidpid.hprof: File exists"en su salida estándar. Asegúrese de mover su archivo de volcado fuera de la ruta de volcado para despejar el camino para futuros archivos de volcado; y utilice el <pid>marcador de posición en el nombre del archivo para aumentar la entropía en el nombre del archivo.
Ben

1
Fue extremadamente útil. Tomó solo unos minutos encontrar la fuga con Eclipse Memory Analyzer.
Aron Lorincz

¿Qué sucede si le damos una ruta a la carpeta que no existe en el sistema? ¿Creará una carpeta y empujará el basurero dentro de esa carpeta?
Vinit89

47

Puede ver este volcado desde la consola UNIX.

La ruta para el volcado del montón se proporcionará como una variable justo después de colocar la variable mencionada.

P.ej:

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

Puede ver el volcado desde la consola en la ruta mencionada.


4

Me resultó difícil descifrar qué se entiende por "directorio de trabajo de la VM". En mi ejemplo, estaba usando el programa Java Service Wrapper para ejecutar un jar: los archivos de volcado se crearon en el directorio donde había colocado el programa wrapper, por ejemplo, c: \ myapp \ bin. La razón por la que descubrí esto es porque los archivos pueden ser bastante grandes y llenaron el disco duro antes de que descubriera su ubicación.


Puede encontrar su directorio de trabajo mediante el comando pwdx <PID>. Primero haz un ps -ef | grep java, encuentre su PID para su aplicación java, luego ejecute pwdx <PID>. Te dirá el directorio de trabajo.
RCG

2

Si no está utilizando la opción "-XX: HeapDumpPath", en el caso de JBoss EAP / As de forma predeterminada, el archivo de volcado del montón se generará en el directorio "JBOSS_HOME / bin".

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.