30 nov 2015
VisualVM

Monitorando sua aplicação Java com VisualVM

VisualVM é uma ferramenta que integra várias outras ferramentas de linha de comando da JDK(jconsole, jinfo, jstack…) já existentes. Com ele é possível monitorar e analisar suas aplicações Java através de relatórios e gráficos em tempo real.

VisualVM - Monitoramento por Gráficos

VisualVM – Monitoramento por Gráficos

O VisualVM é distribuído junto com a JDK partir da versão 6 – procure por “jvisualvm” dentro do seu JAVA_HOME/bin – e você pode também fazer o download da última versão no site oficial(https://visualvm.java.net/download.html).

VisualVM - Executando o VisualVM

VisualVM – Executando o VisualVM

Assim que o VisualVM é iniciado, ele encontra as JVM’s iniciadas na máquina local e as mostra no dock “Applications”. A partir deste menu é possível acessar as várias informações.

No exemplo abaixo, apenas iniciei o Tomcat, com o VisualVM já aberto, e ele já apareceu no dock.

VisualVM - Detecção das VM's locais

VisualVM – Monitored hosts

Ainda no dock em “Remote” é possível registrar uma JVM em outro computador remoto. Basta para isso habilitar a porta JMX para a conexão.

Note que a aba “Overview” já traz algumas informações interessantes sobre a aplicação, como o número do processo, a classe principal de execução da aplicação, versão da JVM e seus argumentos.

Na aba “Monitor” temos os gráficos que são atualizados a cada segundo(o tempo pode ser configurado). Ainda a partir desta aba, podemos invocar um “Full Garbage Collection” através do botão “Perform GC” e também podemos fazer um “Heap Dump”, que gravará um snapshot em arquivo “.hprof” contendo várias informações do que havia na heap naquele momento. Útil quando você viu algo estranho e gostaria de manter o histórico daquela ocorrência para ser verificado.

Destaco aqui o gráfico da  “Heap”, que mostra o que a aplicação está consumindo e o tamanho reservado. Este gráfico em particular pode ser bastante útil quando estamos tentando ajustar os argumentos da JVM relacionados ao uso de memória.

VisualVM - Aba Monitor

VisualVM – Aba Monitor

Em “Profiler”, temos uma poderosa ferramenta onde podemos analisar o desempenho da aplicação em relação à CPU e memória(botões “CPU” e “Memory” respectivamente). No exemplo abaixo, o VisualVM está fazendo o profiling analisando o uso da CPU. Perceba em “Profiling results” – atualizado automaticamente – o tempo que cada método levou para ser executado e a quantidade das invocações.

VisualVM - Aba Profiler

VisualVM – Aba Profiler

Ainda em “Profiling results” é possível resetar os resultados, criar snapshots, salvar e exportar os resultados.

Mas e a aba “Sampler”?

Em “Sampler” também podemos analisar o desempenho da aplicação em relação ao uso da CPU e memória.

Apesar do objetivo ser basicamente o mesmo de profiling, há diferenças importantes à se saber:

Sampler – funciona pegando vários thread dumps e analisando stack traces da execução. É mais rápido, porém menos preciso, uma vez que não exige alterações em runtime no seu bytecode (o que poderia ser um risco para a aplicação).

Profiler – executando o profiling, suas classes e métodos serão “instrumentas” para que os mesmos se reportem sempre quando forem invocados. É mais preciso, uma vez que o método sempre reporta quando é invocado e não apenas quando um dump é feito. Porém, isso significa que os bytecodes de suas classes serão modificados, o que pode afetar(mesmo “quebrar”) a execução da sua aplicação.

VisualVM - Aba Sampler

VisualVM – Aba Sampler

Todas as threads podem ser visualizadas na aba “Threads”. Aqui você pode ver os estados das threads, e em “Details” ainda pode conferir o tempo em que determinada thread está executando.

VisualVM - Aba Threads

VisualVM – Aba Threads

Quer mais do VisualVM? Entre no menu superior “Tools” e “Plugins” para mais algumas ferramentas interessantes. Veja o visualizador do Garbage Collector que instalei.

VisualVM - Aba Visual GC

VisualVM – Aba Visual GC

O visualizador mostra o consumos das etapas na estrutura da heap e também gráficos em tempo real.

Com esta quantidade razoável de informações e ferramentas para análise, podemos tirar muito proveito do VisualVM para analisarmos a performance de nossas aplicações Java.

Na segunda parte deste assunto, vamos demonstrar o uso do VisualVM e tentar identificar alguns problemas com algumas aplicações de exemplo. Então, fique ligado! 😉

 

CTA-ebook-transformação-digital

Rodrigo Facholi
About Rodrigo Facholi

Desenvolvedor há 9 anos, e há 7 trabalhando na redspark.

Leave a Comment