Roteiro para Análise com JVisualVM e Memory Analyzer

📌 Roteiro para Análise com JVisualVM e Memory Analyzer

1️⃣ Preparação do Ambiente

Configurar a aplicação para permitir monitoramento remoto

    1. 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
  1. 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 for True, o JVisualVM conseguirá se conectar.

    2️⃣ Monitoramento com JVisualVM

    Conectar ao servidor

      1. Abra o JVisualVM no seu Windows.
      2. Vá em “File” > “Add Remote Host” e adicione o IP do servidor.
      3. Em “Remote”, adicione a conexão:
     <ip_do_servidor>:22001
    
    
    1. Clique na conexão para abrir os detalhes.

        Analisar CPU e Threads

        1. 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.
        2. 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:

        1. Clique no botão “Heap Dump”.
        2. O arquivo será salvo no servidor (/tmp/heapdump-xxxxx.hprof).
        3. 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:

        1. Vá na aba “Threads” e clique em “Thread Dump”.
        2. 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.

      1. No servidor, gere um Heap Dump manualmente:
      2. jcmd <PID_DO_PROCESSO< GC.heap_dump /opt/smartsim/logs/heapdump.hprof
        
        
      3. Baixe o arquivo para sua máquina Windows (via scp ou WinSCP).
      4. 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:

        1. Use ferramentas como Apache JMeter ou wrk para simular múltiplos acessos.
        2. Monitore a resposta da aplicação em JVisualVM e MAT.
        3. 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: