Durante el uso del software Java, los problemas extraños a veces surgen inexplicablemente. Estos problemas a menudo no pueden ubicarse utilizando información de registro. En este momento, necesitamos analizar el problema verificando la relación de la llamada de la pila de los hilos dentro del proceso.
Por ejemplo, cuando estamos haciendo una operación, múltiples cuadros de advertencia aparecerán inexplicablemente, algunos de los cuales son normales y otros no. Para estos mensajes de advertencia de error, ¿cómo debemos localizar el código en el que la ubicación tiene un cuadro emergente de error? Necesitamos ver los diversos hilos del software después del cuadro emergente y descubrir qué hilo está causando el problema. Pero a veces debido al medio ambiente, el tiempo y otros problemas, no podemos usar el IDE para depurar. Solo podemos tomar una instantánea de memoria a través del software de la herramienta y luego analizar la información de memoria.
Hoy presento una herramienta de uso común: Jstack
Jstack es una herramienta que viene con JDK y también es un software con una tasa de apariencia muy alta en la sintonización de rendimiento de JVM. Entonces es muy necesario dominarlo.
Jstack puede generar instantáneas de hilos del punto actual en el tiempo del JVM.
Una instantánea de subprocesos es una colección de pilas de métodos que se está ejecutando cada hilo en el JVM actual. Las principales razones para generar instantáneas de hilos:
1. La razón de las pausas a largo plazo de hilos a través de instantáneas de hilos, como puntos muertos entre hilos, bucles muertos y espera a largo plazo causada por solicitar recursos externos.
2. Determine la fuente de información de excepción a través del análisis de la instantánea de subprocesos de la relación de llamada del método de ejecución actual.
Es muy simple de usar:
(PD: La premisa es que ya tienes un JDK con Jstack. Es mejor tener la variable de entorno establecida).
Paso 1: Vea el PID del proceso a través de Windows Task Manager
Aquí hablo brevemente sobre lo que es PID: PID es la identidad de cada proceso. Es una identidad única asignada por el sistema operativo para identificar la identidad del proceso después de que se inicia el software.
Como se muestra
En la pestaña Proceso, Ver> Seleccionar columna
Verifique el PID y confirme
Cambie a la pestaña Aplicación y seleccione el programa a la memoria de instantánea. La imagen seleccionada es Android Studio. Haga clic derecho para ir al proceso.
Aquí podemos ver que el PID correspondiente de Android Studio es 9952
El segundo paso es abrir la línea de comando y ejecutar el programa JSTACK
Tenga en cuenta que si la variable de entorno no se agrega con éxito, solo se puede ejecutar en la ruta Jstack, de lo contrario, el sistema operativo no la reconocerá.
Como se muestra en la figura, generalmente hay dos parámetros operativos aquí, que se utilizan para tomar instantáneas de memoria.
Sus significados son los siguientes:
-L Long Listings imprimirán información de bloqueo adicional. Cuando ocurre un punto muerto, puede usar Jstack -L PID para observar la situación de la mantenimiento de la cerradura
-M Modo mixto, no solo genera información de la pila Java, sino que también genera información de pila C/C ++ (como el método nativo)
Normalmente usamos el parámetro -l para satisfacer las necesidades
El formato es el siguiente Jstack -L PID >> 123.txt
PS nota aquí >> significa redirección, lo que significa generar las instantáneas capturadas a 987.txt. >> Es mejor mantener espacios cuando las dos veces
De esta manera, generaremos un archivo 987.txt en la ruta de la línea de comandos y escribiremos la instantánea de memoria en este texto al mismo tiempo.
Como se muestra en la figura a continuación: