📌 Roteiro para Análise com JVisualVM e Memory Analyzer
1️⃣ Preparação do Ambiente
✅ Configurar a aplicação para permitir monitoramento remoto
-
- No script de inicialização do microserviço, adicione as flags necessárias para habilitar o JMX:
-Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=22001 \ -Dcom.sun.management.jmxremote.rmi.port=22001 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Djava.rmi.server.hostname=<ip_do_servidor< \ -Djava.net.preferIPv4Stack=true
- Reinicie o serviço após adicionar essas configurações.
✅ Verificar se a porta está acessível No Windows, teste a conexão com:
Test-NetConnection -ComputerName <ip_do_servidor< -Port 22001
Se
TcpTestSucceeded
forTrue
, o JVisualVM conseguirá se conectar.
2️⃣ Monitoramento com JVisualVM
✅ Conectar ao servidor
-
- Abra o JVisualVM no seu Windows.
- Vá em “File” > “Add Remote Host” e adicione o IP do servidor.
- Em “Remote”, adicione a conexão:
<ip_do_servidor>:22001
- Clique na conexão para abrir os detalhes.
✅ Analisar CPU e Threads
-
Vá até “Monitor” e observe:
- CPU Usage → Deve ter um comportamento estável. Se houver picos constantes, pode indicar um loop infinito ou consumo excessivo de CPU.
- Heap Memory → Verifique se há crescimento contínuo da memória sem redução (possível vazamento).
- Threads → Se houver muitas threads bloqueadas, pode indicar um problema de concorrência.
-
Em “Threads”, analise:
- Estado das threads (RUNNABLE, BLOCKED, WAITING).
- Se há muitas threads bloqueadas (
BLOCKED
), pode indicar deadlock ou recurso concorrente problemático.
✅ Capturar um Heap Dump para análise detalhada Se houver suspeita de vazamento de memória, gere um Heap Dump:
- Clique no botão “Heap Dump”.
- O arquivo será salvo no servidor (
/tmp/heapdump-xxxxx.hprof
). - Baixe o arquivo para análise posterior com Memory Analyzer.
✅ Capturar um Thread Dump para analisar travamentos Se a aplicação parecer congelada ou com threads bloqueadas:
- Vá na aba “Threads” e clique em “Thread Dump”.
- Analise quais threads estão bloqueadas e suas stacks.
-
3️⃣ Análise de Vazamento de Memória com Memory Analyzer (MAT)
Caso a aplicação esteja consumindo muita memória, use o MAT para análise aprofundada.
- No servidor, gere um Heap Dump manualmente:
-
jcmd <PID_DO_PROCESSO< GC.heap_dump /opt/smartsim/logs/heapdump.hprof
- Baixe o arquivo para sua máquina Windows (via
scp
ou WinSCP). - Abra o Eclipse Memory Analyzer e carregue o
.hprof
.✅ Identificar possíveis vazamentos
- Execute o “Leak Suspects Report” para identificar classes que retêm grandes quantidades de memória.
- Verifique objetos que não estão sendo coletados pelo Garbage Collector.
- Se encontrar muitos objetos da mesma classe (por exemplo,
ArrayList
,HashMap
), pode ser um vazamento causado por referências não liberadas.
4️⃣ Testes de Estresse e Carga
Para identificar problemas sob alta carga:
- Use ferramentas como Apache JMeter ou wrk para simular múltiplos acessos.
- Monitore a resposta da aplicação em JVisualVM e MAT.
- Verifique se há crescimento excessivo da memória sem redução (indicativo de vazamento).
📊 Checklist Final
✅ CPU sobrecarregada? ➝ Verificar consumo na aba “Monitor” do JVisualVM.
✅ Threads bloqueadas? ➝ Analisar Thread Dump.
✅ Consumo excessivo de memória? ➝ Analisar Heap Dump com MAT.
✅ Vazamento de memória? ➝ Relatório “Leak Suspects” no MAT.
✅ Aplicação lenta? ➝ Identificar queries pesadas ou métodos demorados no JVisualVM.
Share this content: