Como faço para analisar um arquivo .hprof?
Pergunta
Eu tenho um servidor de produção em execução com o seguinte sinalizador: - XX: + HeapDumpOnOutOfMemoryError
Na noite passada, ele gerou um arquivo java-38942.hprof quando o nosso servidor encontrou um erro de pilha. Acontece que os desenvolvedores do sistema sabia da bandeira, mas não há maneira de obter qualquer informação útil a partir dele.
Todas as idéias?
Solução
Se você quer uma ferramenta bastante avançado para fazer alguma cutucando sério ao redor, olhar para o projeto Memory Analyzer no Eclipse, contribuíram para eles pela SAP.
Algumas das coisas que você pode fazer é mente-blowingly bom para encontrar vazamentos de memória, etc -. Incluindo executando uma forma de SQL limitada (QVG) contra os objetos na memória, i
SELECIONAR toString (firstName) FROM com.yourcompany.somepackage.User
Totalmente brilhante.
Outras dicas
Você pode usar jhat , The Java Heap Analysis Tool, fornecidas por padrão com o JDK. É linha de comando, mas começa um servidor web / browser que você usa para examinar a memória. Não é o mais user friendly, mas pelo menos está já instalado a maioria dos lugares você irá. Uma visão muito útil é o link "pilha histograma" na parte inferior.
ex: jhat -port 7401 -J-Xmx4G dump.hprof
jhat
pode executar QVG "nos dias de hoje", bem como (ligação inferior "executar QVG")
Você também pode usar HeapWalker do Netbeans Profiler ou o < a href = "https://visualvm.github.io/" rel = "noreferrer"> Visual VM stand-alone ferramenta. Visual VM é uma boa alternativa para jhat como é ficar sozinho, mas é muito mais fácil de usar do que jhat.
Você precisa de Java 6 + para utilizar plenamente Visual VM.
Apenas obter o Eclipse Memória Analyzer . Não há nada melhor lá fora, e é grátis.
jhat só é utilizável para "aplicações brinquedo"
YourKit Java Profiler parece lidar com eles também.
Se você quiser fazer uma análise personalizada de sua heapdump então há:
- JVM Heap Dump biblioteca de Análise https : //github.com/aragozin/jvm-tools/tree/master/hprof-heap
Esta biblioteca é rápido, mas você terá que escrever o seu código de análise em Java.
De docs:
- Não cria quaisquer arquivos temporários em disco para despejo de pilha processo
- Pode trabalhar diretamente GZ compactado heap dumps
- HeapPath notação