Los volcados de subprocesos pueden ayudarnos a determinar los picos de la CPU, los estallidos muertos, las excepciones de memoria, la respuesta de aplicación lenta, el largo tiempo de respuesta y otros problemas del sistema. Algunas herramientas de análisis en línea como http://fastthread.io/ también pueden ayudarnos a analizar y localizar problemas, pero estas herramientas requieren un archivo de volcado. Por lo tanto, en este artículo, resumí las formas de obtener archivos de volcados de hilos Java en 7.
1. Jstack
Jstack es una herramienta efectiva de línea de comandos para rastrear archivos de volcado de subprocesos. Se encuentra en la carpeta bin (jdk_home/bin) en el directorio JDK. El siguiente es el comando para rastrear archivos de volcado:
jstack -l <pid>> <sil -Path>
ilustrar:
PID: La ID de proceso de la aplicación Java, es decir, la ID de proceso de solicitud que necesita rastrear el archivo de volcado.
Path de archivo: la ruta para guardar el archivo de volcado.
Ejemplo:
jstack -l 37320> /opt/tmp/threaddump.txt
El ejemplo anterior demuestra usar Jstack para generar archivos de volcado en el directorio /opt/tmp/threaddump.txt.
A partir de Java5, Jstack ha sido incluido en JDK. Si usa la versión anterior de JDK, debe considerar usar otros métodos.
2. Mata -3
En términos de consideraciones de seguridad, algunas máquinas en entornos de producción solo contienen entornos JRE, por lo que no se puede utilizar la herramienta Jstack. En este caso, podemos usar Kill -3:
kill -3 <pid>
ilustrar:
PID: La ID de proceso de la aplicación Java, es decir, la ID de proceso de solicitud que necesita rastrear el archivo de volcado.
Ejemplo:
kill -3 37320
Cuando se usa Kill -3 para generar archivos de volcado, los archivos de volcado se emiten al flujo de error estándar. Si su aplicación se ejecuta en TomCat, el contenido de volcado se enviará al archivo <omcat_home> /logs/catalina.out.
3. JVISUALVM
Java VisualVM es una herramienta de interfaz gráfica que puede proporcionar información JVM. Se encuentra en el archivo jdk_home/bin/jvisualvm.exe. Comenzando con JDK6 Update7, se incluye en el JDK.
Ejecute jVisualVM y en el panel izquierdo (como se muestra en la figura a continuación), se enumera la información de JVM en ejecución. Esta herramienta puede obtener archivos de volcado desde locales o remotos con JVMS.
Haga clic en el botón de volcado de subproceso correspondiente al nombre del proceso en la figura anterior para generar un archivo de volcado, como se muestra en la figura a continuación:
4. JMC
Java Mission Control (JMC) es una herramienta que puede recopilar y analizar datos de un entorno local o de producción. Comenzando con Oracle JDK 7 Update 40, se incluye en el JDK, que puede generar archivos de volcado a partir del JVM. JMC se encuentra en el archivo jdk_home/bin/jmc.exe:
Después de ejecutar la herramienta, puede ver el proceso Java que se ejecuta localmente, que también se puede conectar a una máquina remota. Haga doble clic en el proceso Java que desea generar el archivo de volcado, haga clic en la grabadora de vuelo y verá el siguiente cuadro de diálogo:
En el cuadro desplegable de volcado de subprocesos, puede seleccionar el intervalo de tiempo para generar el archivo de volcado. En el ejemplo anterior, se generará un archivo de volcado cada 60 segundos. Después de seleccionar Complete, inicie la grabadora de vuelo y puede ver el contenido del archivo de volcado en el panel de subprocesos:
5. Windows (CTRL + Break)
Este método solo es válido en los sistemas operativos de Windows:
Seleccione la línea de comando en la ventana de la consola
Presione el comando "ctrl + break" en la ventana de la línea de comando
Luego se generará un archivo de volcado y el contenido del archivo de volcado se imprimirá en la ventana de la línea de comando.
Nota 1: Hay varios cuadernos (como la serie Lenovo T) que han cancelado la tecla "Break", en cuyo caso tiene que buscar en Google las claves que tienen funciones similares como la tecla Break, y descubrí que la tecla "Clave de función + B" es la misma que la tecla Break, por lo que utilicé la tecla "Ctrl + Fn + B" para generar el archivo de volcado.
Nota 2: Una desventaja de usar el método anterior es que el contenido del archivo de volcado se imprimirá en la consola. Si no hay un archivo de volcado, es difícil para nosotros usar herramientas de análisis como http://fasthread.io para analizar el archivo de volcado. Por lo tanto, puede usar el siguiente comando para emitir el contenido del archivo de volcado a un archivo de texto. Por ejemplo, el nombre de su aplicación es SampleThreadProgram, por lo que los comandos habituales son los siguientes:
java -classpath . SampleThreadProgram
El comando para emitir el contenido del archivo de volcado a un archivo de texto es el siguiente:
java -classpath . SampleThreadProgram > C:/workspace/threadDump.txt 2>&1
Después de presionar la tecla "Ctrl + Break", el archivo de volcado se guardará en c: /workspace/threaddump.txt.
6. ThreadmxBean
Comenzando con JDK 1.5, se ha introducido ThreadMXBean. Esta es la interfaz de administración del JVM. Usando esta interfaz, solo necesita una pequeña cantidad de código para generar archivos de volcado. La siguiente es la implementación principal del uso de ThreadMXBean para generar archivos de volcado:
public void dumpThreadDump () {ThreadMxBean ThreadMxBean = ManagementFactory.getThreadMxBean (); for (ThreadInfo ti: ThreadMxBean.DumpallThreads (True, True)) {System.out.print (ti.ToString ()); }}7. Dinámica de aplicaciones de herramientas APM
Algunas herramientas de monitoreo de rendimiento de la aplicación proporcionan la función de generar archivos de volcado. Si usa App Dynamics para monitorear su aplicación, los siguientes son los pasos para generar archivos de volcado:
Abra la ventana Crear acción y seleccione diagnósticos-> Tome un volcado de subprocesos en la ventana Crear acción;
Ingrese el nombre de la acción, el número de archivos de volcado para rastrear y el intervalo de tiempo (milisegundos) para rastrear archivos de volcado;
Si desea realizar algunas acciones antes de que comience la acción de volcado de rastreo, puede seleccionar la ejecución de la aprobación de la ejecución antes de esta casilla de verificación de acción e ingresar la dirección de correo electrónico del individuo o grupo;
Haga clic en Aceptar.
Resumir
Aunque enumeré 7 formas de obtener archivos de volcado antes, en mi humilde opinión, Jstack y Kill -3 son las mejores opciones por las siguientes razones:
a. Simple, fácil de implementar;
b. General: en la mayoría de los casos, independientemente del tipo de sistema operativo, proveedor de Java, versión JVM, etc.