estoy usando kill -3
comando para ver el volcado de subprocesos de la JVM en unix. Pero, ¿dónde puedo encontrar el resultado de este kill
comando? ¡¡Estoy perdido!!
estoy usando kill -3
comando para ver el volcado de subprocesos de la JVM en unix. Pero, ¿dónde puedo encontrar el resultado de este kill
comando? ¡¡Estoy perdido!!
Respuestas:
Alternativamente, puede usar jstack (incluido con JDK) para realizar un volcado de subprocesos y escribir la salida donde desee. ¿No está disponible en un entorno Unix?
jstack PID > outfile
El volcado de subprocesos se escribe en el sistema desde la máquina virtual en la que ejecutó kill -3
. Si está redirigiendo la salida de la consola de la JVM a un archivo, el volcado de subprocesos estará en ese archivo. Si la JVM se está ejecutando en una consola abierta, el volcado de hebras se mostrará en su consola.
Hay una manera de redirigir la salida de volcado de subprocesos de JVM en la señal de interrupción a un archivo separado con la opción de diagnóstico LogVMOutput :
-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log
Con Java 8 en la imagen, jcmd
es el enfoque preferido.
jcmd <PID> Thread.print
A continuación se muestra el fragmento de la documentación de Oracle :
El lanzamiento de JDK 8 introdujo Java Mission Control, Java Flight Recorder y la utilidad jcmd para diagnosticar problemas con aplicaciones JVM y Java. Se sugiere utilizar la última utilidad, jcmd en lugar de la utilidad jstack anterior para mejorar el diagnóstico y reducir la sobrecarga de rendimiento.
Sin embargo, enviar esto con la aplicación puede tener implicaciones de licencia de las que no estoy seguro.
jcmd
no se puede conectar al proceso de servicio de Windows com.sun.tools.attach.AttachNotSupportedException: Insufficient memory or insufficient privileges to attach
mientras jstack -F
tiene éxito: stackoverflow.com/questions/1197912/…
Cuando se usa kill -3, se debería ver el volcado de subprocesos en la salida estándar. La mayoría de los servidores de aplicaciones escriben la salida estándar en un archivo separado. Debería encontrarlo allí cuando use kill -3. Hay varias formas de obtener volcados de hilo:
kill -3 <PID>
: Da salida a salida estándar.Para las VM de hotspot también podemos usar el jstack
comando para generar un volcado de hilo. Es parte del JDK. La sintaxis es la siguiente:
Usage:
jstack [-l] <pid> (to connect to running process)
jstack -F [-m] [-l] <pid>(to connect to a hung process)
- For JRockit JVM we can use JRCMD command which comes with JDK Syntax:
jrcmd <jrockit pid> [<command> [<arguments>]] [-l] [-f file] [-p] -h]
kill -3 <PID>
, no debería matar a la JVM. ¿Qué tipo de aplicación Java estás viendo?
Pasos que debe seguir si desea el volcado de subprocesos de su proceso StandAlone Java
Paso 1: Obtenga el ID de proceso para el script de shell que llama al programa java
linux$ ps -aef | grep "runABCD"
user1 **8535** 4369 0 Mar 25 ? 0:00 /bin/csh /home/user1/runABCD.sh
user1 17796 17372 0 08:15:41 pts/49 0:00 grep runABCD
Paso 2: Obtenga el ID de proceso para el niño que fue invocado por runABCD. Utilice el PID anterior para obtener los niños.
linux$ ps -aef | grep **8535**
user1 **8536** 8535 0 Mar 25 ? 126:38 /apps/java/jdk/sun4/SunOS5/1.6.0_16/bin/java -cp /home/user1/XYZServer
user1 8535 4369 0 Mar 25 ? 0:00 /bin/csh /home/user1/runABCD.sh
user1 17977 17372 0 08:15:49 pts/49 0:00 grep 8535
Paso 3: obtenga el JSTACK para el proceso en particular. Obtenga el ID de proceso de su proceso XYSServer. es decir 8536
linux$ jstack **8536** > threadDump.log