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?

Dmitry Trunov
fuente
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.

Matt Solnit
fuente
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.

Swaminathan Krishnamoorthi
fuente
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.

B5A7
fuente
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".

Swapnil Chaudhari
fuente