🎯 Introdução
O jstack é uma ferramenta fundamental para diagnosticar problemas em aplicações Java. Ele permite visualizar o thread dump de um processo, ou seja, o estado de todas as threads no momento da execução. Essa análise é essencial para:
-
Identificar gargalos de processamento
-
Detectar deadlocks
-
Verificar threads presas ou bloqueadas
-
Analisar consumo elevado de CPU por threads específicas
🔧 Como usar o jstack?
1. Identificar o PID do processo Java
No Linux:
ps -ef | grep java
No Windows (cmd ou PowerShell):
jps
2. Executar o jstack
Com o PID identificado, execute:
jstack
Para salvar o dump em um arquivo para análise posterior:
jstack > thread-dump.txt
🕵️♂️ Interpretando o thread dump
O output do jstack mostra todas as threads com:
-
Nome da Thread
-
Estado (State):
-
RUNNABLE: em execução ou aguardando CPU -
WAITING: aguardando indefinidamente por outro recurso/thread -
TIMED_WAITING: aguardando com timeout -
BLOCKED: esperando um lock de sincronização -
TERMINATED: finalizada
-
-
Stack trace: pilha de execução mostrando onde a thread está atuando no código.
⚠️ O que observar no dump?
✅ Threads RUNNABLE consumindo CPU
Se muitas threads estão em RUNNABLE executando métodos pesados, pode haver gargalo de processamento ou loop infinito.
✅ Threads BLOCKED
Indica threads aguardando locks, revelando possíveis problemas de sincronização ou concorrência.
✅ Threads WAITING/TIMED_WAITING
Normalmente aguardam I/O ou pool. Verifique se estão presas além do tempo esperado.
✅ Deadlocks
O jstack informa no final do dump se há deadlocks detectados, mostrando os locks em disputa.
💡 Dicas práticas para análise
-
Colete múltiplos dumps em intervalos curtos para detectar padrões ou travamentos reais:
for i in {1..3}; do jstack > jstack_dump_$i.txt sleep 10 done - Cruze informações com top ou htop
No Linux, utilize:top -H -p - Ferramentas de apoio
Utilize analisadores online como:printf "%d\n" 0x1a3b
- fastThread (Gratuito para dumps curtos)
- IBM Thread and Monitor Dump Analyzer
📝 Exemplo de análise prática
🔍 1. Verificar deadlocks
No final do dump, busque pela seção Found one Java-level deadlock.
🔍 2. Filtrar threads RUNNABLE
grep -A 10 RUNNABLE thread-dump.txt
🔍 3. Verificar stacks repetidas
Threads bloqueadas no mesmo método indicam possíveis gargalos de sincronização.
🚀 Conclusão
O uso do jstack deve fazer parte da rotina de análise de problemas em produção ou ambientes de homologação. Ele fornece visibilidade imediata do que está ocorrendo dentro do processo Java, permitindo:
✅ Diagnóstico rápido de travamentos
✅ Identificação de deadlocks
✅ Verificação de consumo anormal de CPU
Share this content:
