Red de conocimiento informático - Material del sitio web - Cómo analizar el DUMP de subprocesos de Java

Cómo analizar el DUMP de subprocesos de Java

I. Introducción a los volcados de subprocesos

1.1 ¿Qué es un volcado de subprocesos?

Los volcados de subprocesos son una herramienta muy útil para diagnosticar problemas con aplicaciones Java. Cada máquina virtual Java es capaz de generar un volcado de subprocesos de todos los subprocesos en algún momento. Aunque cada máquina virtual Java imprime volcados de subprocesos de forma ligeramente diferente, en su mayoría proporcionan una instantánea de los subprocesos activos actualmente, así como seguimientos de pila de todos los subprocesos Java en la JVM, que generalmente incluyen el nombre completo de la clase y el método ejecutado, si es posible. El código también está incluido. La información de la pila generalmente contiene el nombre completo de la clase y el método ejecutado y, si es posible, el número de líneas de código fuente.

1.2 Características de los volcados de subprocesos

1. Puede ejecutarse en una variedad de sistemas operativos

2. Puede ejecutarse en una variedad de servidores de aplicaciones Java

>

3. Se puede ejecutar en un entorno de producción sin afectar el rendimiento del sistema

4. El problema se puede ubicar directamente en la línea de código de la aplicación

1.3 Almacenamiento de transferencia de subprocesos. Se puede utilizar en una variedad de entornos, como JVM, JVM o servidor de aplicaciones. 1.3 Problemas que Thread Dump puede diagnosticar

1. Encontrar pérdidas de memoria, lo cual es común cuando un programa carga una gran cantidad de datos en el caché

2. /p> p>

1.4 Cómo capturar volcados de subprocesos

En términos generales, cuando el servidor se bloquea, falla o funciona mal, es necesario capturar la pila de subprocesos del servidor (volcado de subprocesos). Volcado de hilos para su posterior análisis. En la práctica, la información contenida en el volcado suele ser insuficiente para confirmar el problema. Para reflejar los cambios dinámicos en el estado del subproceso, es necesario realizar volcados de subprocesos varias veces seguidas, con un intervalo de 10 a 20 segundos cada vez. Se recomienda generar al menos tres información de volcado. cada volcado apunta al mismo problema, estamos seguros de la tipicidad del problema.

Existen muchas formas de obtener ThreadDump, algunas de ellas se enumeran a continuación:

Comando del sistema operativo para obtener ThreadDump:

Windows:

1. Vaya a la ventana de salida estándar del servidor y presione Control Break, luego deberá copiar la pila de subprocesos a un archivo;

Volcado de subprocesos:

Windows: 1. Vaya Para ir a la ventana de salida estándar del servidor, presione la tecla Control Break. Luego copie la pila de subprocesos en un archivo;

UNIX/Linux:

Primero busque el ID del proceso del servidor y luego obtenga la pila de subprocesos.

1. ps -ef | grep java

2. kill -3 lt;pidgt;

Nota: tenga cuidado, un paso puede interrumpir el proceso del servidor. .

La JVM viene con una herramienta para obtener la pila de subprocesos:

El JDK viene con una herramienta de línea de comandos para obtener el PID y ThreadDump:

1. jps o ps - ef|grepjava (obtener PID)

2. jstack [-l]lt; tee -a jstack.log (obtener ThreadDump)

2. el estado de la conversión del hilo de Java (preparándose para el análisis posterior)

2.1 Nuevo estado (Nuevo)

El hilo creado usando la nueva declaración se encuentra en un nuevo estado. Es igual que otros objetos Java, excepto que está en el montón y está asignado en .

2.2 Ejecutable

Cuando se crea un objeto de hilo y otro hilo llama a su método start(), el hilo entrará en el estado listo y la máquina virtual Java creará una pila de llamadas de método. y contador de programas.

Los subprocesos en este estado están en el grupo ejecutable, esperando acceder a la CPU.

2.3 En ejecución

Los subprocesos en este estado ocupan la CPU y ejecutan el código del programa. Solo los subprocesos en estado listo tienen la oportunidad de ingresar al estado de ejecución.

2.4 Bloqueo

El estado de bloqueo significa que el hilo abandona la CPU y deja de ejecutarse temporalmente por algún motivo. Cuando se bloquea un subproceso, la máquina virtual Java no asigna CPU al subproceso y el subproceso no tiene la posibilidad de ingresar al estado de ejecución antes de que el subproceso vuelva a ingresar al estado listo.

El estado de bloqueo se puede dividir en los siguientes tres tipos:

1) Bloqueado en el grupo de espera del objeto: cuando el hilo está en estado de ejecución, si la espera ( ) Se ejecuta el método del objeto. La máquina virtual Java colocará el hilo en el grupo de espera del objeto, lo que implica "comunicación de hilo".

2) Bloqueado en el grupo de bloqueo del objeto: cuando un subproceso se ejecuta e intenta adquirir el bloqueo de sincronización del objeto, si el bloqueo de sincronización del objeto ya está ocupado por otros subprocesos, la máquina virtual Java colocará el subproceso en El grupo de bloqueo del objeto. Esto tiene que ver con la "sincronización de subprocesos".