Definição Jstack:
O JSTack é uma ferramenta de rastreamento de pilha que vem com as máquinas virtuais Java.
Introdução básica:
O JSTACK é usado para gerar um instantâneo de thread do horário atual da máquina virtual Java. Os instantâneos de threads são uma coleção de pilhas de método que cada encadeamento na máquina virtual Java atual está executando. O principal objetivo de gerar instantâneos de threads é localizar os motivos para pausas de longo prazo de threads, como impasse entre threads, loops mortos e espera a longo prazo causados pela solicitação de recursos externos.
Quando um thread faz uma pausa, você pode verificar a pilha de chamadas de cada thread através do JSTack e pode saber o que o thread que não responde está fazendo em segundo plano ou quais recursos está esperando.
Formato de comando:
jstack [opção] pid
Parâmetros básicos:
-F Força de impressão de informações quando 'jstack [-l] pid' não possui correspondente
-l Lista longa. Imprima informações adicionais sobre o bloqueio, como a lista do sincronizador possuível pertencente a java.util.concurrent.
-m Imprima todas as informações da pilha das estruturas Java e C/C ++ nativas. -h | -Help Informações de ajuda de impressão
ID do processo PID Java que precisa ser impresso Informações de configuração, você pode usar a ferramenta JPS para consultar
Caso
C:/Usuários/Administrador> JStack 5516full Thread Dump Java Hotspot (TM) servidor de 64 bits VM (Modo misto 24.79-B02): "DestroyJavavm" PRIA = 6 TID = 0X000000000027D800 NID = 0x1BB0s] "Thread -1" prio = 6 Tid = 0x00000000000CB13800 NID = 0x19AC Aguardando a entrada do monitor [0x0000000000D67F000] java.lang.thread.state: 000 00 00 00 itens (no monitor de objeto) em thread.deadlockdemo $ 2.run (deadLockdemo.java.java:3) (a java.lang.string) - bloqueado <0x00000007d5a9beb8> (a java.lang.string) em java.lang.thread.run (fonte desconhecida) "Thread -0" PRIOTE = 6 TID = 0x000000000CB0E800 NID = 0x6bc = 6 Tid = 0x000000000CB0E800 NID = 0x6BC java.lang.Thread.State: BLOCKED (on object monitor) at thread.DeadLockDemo$1.run(DeadLockDemo.java:21) - waiting to lock <0x00000007d5a9beb8> (a java.lang.String) - locked <0x00000007d5a9be88> (a java.lang.String) at java.lang.thread.run (fonte desconhecida)
Um código de impasse é executado aqui, fazendo com que os dois threads do programa aguardem a outra parte que liberasse o bloqueio, fazendo com que o programa seja implementado.
A partir deste código, pode -se ver claramente que a linha 35 e a linha 21 em deadlockdemo.class estão bloqueadas e, em seguida, precisamos otimizar essa função.
PS: Na operação real, as informações de despejo geralmente não são suficientes para confirmar o problema. Recomenda -se gerar três informações de despejo. Se cada despejo apontar para o mesmo problema, determinaremos a tipicidade do problema.
Resumir
O exposto acima é tudo sobre a análise das instâncias do JSTACK e do Thread Dump neste artigo. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!