maneras de cómo obtener volcado de stack de la ejecución de Tomcat 7

He intentado esto Obtenga un heapdump en JVM de Tomcat 6 pero no funciona para mí. ¿Hay otras formas de obtener un volcado de stack desde el servidor Tomcat ? ¡Gracias por adelantado!

La forma más fácil de obtener volcado de stack es utilizar jmap . En la máquina con proceso java ejecuta el comando jmap. Ejemplo de uso:

jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842 

Usa jps para saber java pid.


También puedes hacer un volcado de stack a través de jvisualvm . Puede conectarse a la máquina remota a través de jmx o jstatd . Puede hacer heapdump y almacenar en la máquina remota.

Para analizar los heapdumps te pueden aconsejar: MAT . Una herramienta muy potente que te permite entender rápidamente los problemas. Usted puede encontrar aquí buena inro al MAT.


Si no quiere detener la aplicación durante mucho tiempo, puede hacer volcado binario ( puede usar gcore o gdb ). Y puedes usar jmap para analizar gdb dump . Más información se puede leer en el blog atlassian . Cuidado con algunas cuestiones .

Otra forma además del botón “Dump heap” de jvisualvm es a través de la interfaz JMX. De esta manera, incluso le permite especificar dónde almacenar el volcado.

conéctese al servidor JMX de Tomcat utilizando jconsole o jvisualvm con el complemento JMX. Luego HotSpotDiagnotic a com.sun.management -> HotSpotDiagnotic -> Operations . Junto a dumpHeap rellene los dos parámetros. De la documentación de oracle (ver aquí ):

Parámetros:

outputFile – el nombre del archivo dependiente del sistema

vivo: si es verdadero, solo descarga objetos vivos, es decir, objetos que son accesibles desde otros

Luego presione dumpHeap y mira cómo se congela la máquina virtual durante un tiempo mientras escribes el volcado.

Recomiendo visual VM http://visualvm.java.net/ Es una herramienta todo en uno que puede conectarse a Tomcat, crear y leer volcado de stack, crea volcado de hilos, CPU y muestreador de memoria.

Si usa el nuevo jdk 1.7, VisualVM ya está empaquetado en su carpeta jdk.