Estás confundiendo dos volcados de Java diferentes. kill -3
genera un volcado de subprocesos, no un volcado de almacenamiento dinámico.
Volcado de subprocesos = seguimientos de pila para cada subproceso en la salida JVM para stdout como texto
Volcado de pila = contenido de memoria para la salida del proceso JVM a un archivo binario.
Para realizar un volcado de subprocesos en Windows, CTRL+ BREAKsi su JVM es el proceso en primer plano es la forma más sencilla. Si tiene un shell similar a Unix en Windows como Cygwin o MobaXterm, puede usarlo kill -3 {pid}
como puede hacerlo en Unix.
Para realizar un volcado de subprocesos en Unix, CTRL+ Csi su JVM es el proceso en primer plano o kill -3 {pid}
funcionará siempre que obtenga el PID correcto para la JVM.
Con cualquier plataforma, Java viene con varias utilidades que pueden ayudar. Para volcados de hilo, jstack {pid}
es su mejor apuesta. http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html
Solo para terminar la pregunta del volcado: los volcados del montón no se usan comúnmente porque son difíciles de interpretar. Sin embargo, tienen mucha información útil si sabes dónde / cómo mirarlos. El uso más común es localizar pérdidas de memoria. Es una buena práctica establecer el -D
en la línea de comandos de Java para que el volcado del montón se genere automáticamente en un OutOfMemoryError, -XX:+HeapDumpOnOutOfMemoryError
pero también puede activar manualmente un volcado del montón. La forma más común es usar la utilidad java jmap
.
NOTA: esta utilidad no está disponible en todas las plataformas. A partir de JDK 1.6, jmap
está disponible en Windows.
Un ejemplo de línea de comando sería algo así
jmap -dump:file=myheap.bin {pid of the JVM}
El resultado "myheap.bin" no es legible por humanos (para la mayoría de nosotros), y necesitará una herramienta para analizarlo. Mi preferencia es MAT. http://www.eclipse.org/mat/