Analizador de volcados de hilos JVM
Pega un volcado o carga un archivo para revisar los hilos capturados. El análisis relaciona datos de esa instantánea; no supervisa una JVM en ejecución.
Se ejecuta localmente en tu navegadorPega un volcado o carga un archivo para revisar los hilos capturados. El análisis relaciona datos de esa instantánea; no supervisa una JVM en ejecución.
Se ejecuta localmente en tu navegadorPega la salida de jstack o de jcmd Thread.print, o abre un archivo .txt o .log, y pulsa Analizar localmente. El volcado se lee en este navegador: el resumen cuenta los hilos por java.lang.Thread.State, la tarjeta inferior ordena los marcos de pila que se repiten y los hallazgos nombran los hilos que esperan un bloqueo que otro hilo mantiene.
Un volcado de 13 hilos y 4,3 KB dio RUNNABLE 4, WAITING 3, BLOCKED 2, TIMED_WAITING 2 y UNKNOWN 2, con java.base/java.lang.Thread.sleep(Native Method) como marco más repetido (3 hilos) y dos hilos HTTP esperando el monitor que tenía cache-writer. No se sube nada y no se guarda copia del volcado.
Solo se analiza texto, y solo con las formas que escribe un volcado de JVM: cabeceras de hilo (un nombre entre comillas seguido de prio=, tid= o nid=), líneas java.lang.Thread.State, marcos at y las líneas waiting to lock / locked / parking to wait for que añade jstack -l. Los hilos de la VM se imprimen sin línea de estado, así que caen en la fila UNKNOWN: dos de los trece del ejemplo anterior.
El informe de interbloqueo que jstack añade tras la lista de hilos se lee como informe, no como más hilos: un volcado con tres hilos y un interbloqueo sigue siendo tres hilos, y el informe produce un hallazgo más una línea por cada pareja en espera.
Cuenta cada marco de cada hilo, no solo los tres más internos, porque un marco compartido que queda más abajo en la pila es justo lo que dibuja una ruta de llamada repetida. En un ejemplo de 24 hilos cuyo quinto marco es java.base/java.lang.reflect.Method.invoke(Method.java:568), ese marco aparece 18 veces en el volcado y en la tabla.
Una correlación de bloqueo necesita las dos mitades en el mismo volcado: la línea waiting to lock <id> de un hilo y la línea locked <id> de otro. Los bloqueos cuyo dueño no está en el archivo —un volcado truncado o jstack sin -l— se cuentan como esperas, pero no se afirma quién los tiene.
El tamaño no es un límite práctico: un volcado de 240 hilos y 92 KB devolvió 240 hilos, 6 de ellos bloqueados en un mismo monitor y tres marcos contados 240 veces cada uno, porque el trabajo ocurre en esta máquina.
Un registro de fallo de HotSpot (hs_err_pid*.log) enumera los hilos Java pero no trae ninguna línea java.lang.Thread.State, así que la página lo dice en lugar de dibujar tablas vacías. Cualquier otro texto sin una sola cabecera de hilo recibe la misma respuesta, y un cuadro vacío obtiene un aviso en vez de un resultado.
Se lee un volcado cada vez. El analizador no se conecta a una JVM, no puede muestrear un proceso en ejecución ni vigilar cambios en un archivo; para una vista en vivo, Flight Recorder o un perfilador son la herramienta adecuada.
Los nombres de estado, las firmas de los marcos y los identificadores de bloqueo se imprimen tal como los escribe el volcado, en inglés, porque son datos; las etiquetas que los rodean siguen el idioma de la página.