Eu tenho um servidor de produção executando com o seguinte sinalizador: - XX: + HeapDumpOnOutOfMemoryError
Na noite passada, ele gerou um arquivo java-38942.hprof quando nosso servidor encontrou um erro de heap. Acontece que os desenvolvedores do sistema conheciam a bandeira, mas não tinham como obter informações úteis.
Alguma ideia?
Você pode usar o JHAT , a Java Heap Analysis Tool fornecida por padrão com o JDK. É linha de comando, mas inicia um servidor / navegador da web que você usa para examinar a memória. Não é o mais fácil de usar, mas pelo menos já está instalado na maioria dos lugares por onde você vai. Uma visualização muito útil é o link "heap histograma" na parte inferior.
ex:
jhat -port 7401 -J-Xmx4G dump.hprof
jhat
também pode executar o OQL "atualmente" (link inferior "execute o OQL")fonte
Você também pode usar o HeapWalker no Netbeans Profiler ou na ferramenta autônoma do Visual VM . O Visual VM é uma boa alternativa ao JHAT, pois é independente, mas é muito mais fácil de usar que o JHAT.
Você precisa do Java 6+ para usar totalmente o Visual VM.
fonte
jvisualvm.exe
aJAVASDK/bin
pastaBasta adquirir o Eclipse Memory Analyzer . Não há nada melhor lá fora e é grátis.
JHAT é utilizável apenas para "aplicações de brinquedos"
fonte
O YourKit Java Profiler parece lidar com eles também.
fonte
Se você quiser fazer uma análise personalizada do seu heapdump, então há:
Essa biblioteca é rápida, mas você precisará escrever seu código de análise em Java.
Dos documentos:
fonte
Pessoalmente, prefiro o VisualVM. Um dos recursos que eu gosto no VisualVM é a comparação de heap dump. Quando você está fazendo uma análise de despejo de heap, existem várias maneiras de descobrir o que causou a falha. Uma das maneiras que considero úteis é fazer uma comparação de lixões heap saudáveis e não saudáveis.
A seguir estão as etapas que você pode seguir para isso:
link: https://visualvm.github.io
fonte