Definición de Jstack:
Jstack es una herramienta de rastreo de pila que viene con máquinas virtuales Java.
Introducción básica:
Jstack se usa para generar una instantánea de hilo de la hora actual de la máquina virtual Java. Las instantáneas de subprocesos son una colección de pilas de métodos que cada hilo en la máquina virtual Java actual se está ejecutando. El objetivo principal de generar instantáneas de hilos es localizar las razones de las pausas a largo plazo de hilos, como plazos entre hilos, bucles muertos y espera a largo plazo causadas por solicitar recursos externos.
Cuando se detiene un hilo, puede verificar la pila de llamadas de cada hilo a través de Jstack, y puede saber qué está haciendo el hilo que no responde en segundo plano o qué recursos está esperando.
Formato de comando:
jstack [opción] pid
Parámetros básicos:
-F información de la pila de impresión de fuerza cuando 'jstack [-l] pid' no tiene correspondiente
-L lista larga. Imprima información adicional sobre el bloqueo, como la lista de sincronizantes propios pertenecientes a java.util.concurrent.
-M Imprime toda la información de la pila de Java y marcos nativos de C/C ++. -H | -Help Información de ayuda de impresión
ID de proceso PID Java Que debe imprimir información de configuración, puede usar la herramienta JPS para consultar
Caso
C:/usuarios/administrador> jstack 5516full hilo volcado java hotspot (tm) 64 bit Server VM (24.79-B02 Modo mixto): "DestroyJavavm" prio = 6 TID = 0x00000000000027D800 NID = 0x1BB0 esperando en condición [0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ¿ "Thread -1" prio = 6 TID = 0x00000000000CB13800 nid = 0x19ac esperando la entrada del monitor [0x00000000000000D67F000] java.lang.thread.state: bloqueado (en el monitor de objeto) en Thread.deadlockdemo $ 2.run (Deadlockdemo.Java:35) - Esperando a Lock <0x0000000 0007A java.lang.string) - Bloqueado <0x00000007D5A9BEB8> (a java.lang.string) en java.lang.thread.run (fuente desconocida) "Thread -0" prio = 6 tid = 0x00000000000cb0e800 nid = 0x6bc esperando la entrada del monitor [0x00000000000d48f000] java.lang.lang. Bloqueado (en el monitor de objeto) en Thread.DeadlockDemo $ 1.RUN (DeadLockDemo.Java:21) - esperando bloquear <0x00000007D5A9BEB8> (un java.lang.string) - bloqueado <0x0000000007D5A9Be88> (un java.lang.string) en java.lang.thread.run)
Aquí se ejecuta un código de punto muerto, lo que hace que ambos hilos en el programa esperen a que la otra parte libere el bloqueo, lo que hace que el programa esté en punto de punto.
A partir de este código, se puede ver claramente que la línea 35 y la línea 21 en DeadlockDemo.Class están bloqueados, y luego necesitamos optimizar esta función.
PD: En la operación real, la información del volcado a menudo no es suficiente para confirmar el problema. Se recomienda generar tres información de volcado. Si cada volcado apunta al mismo problema, determinaremos la típica del problema.
Resumir
Lo anterior se trata del análisis de las instancias de JSTACK y TURCT SOCK en este artículo. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!