Come analizzo un file .hprof?
Domanda
Ho un server di produzione in esecuzione con il seguente flag: - XX: + HeapDumpOnOutOfMemoryError
Ieri sera ha generato un file java-38942.hprof quando il nostro server ha riscontrato un errore heap. Si scopre che gli sviluppatori del sistema conoscevano la bandiera ma non c'era modo di ottenere informazioni utili da essa.
Qualche idea?
Soluzione
Se vuoi uno strumento abbastanza avanzato per dare un'occhiata seria in giro, guarda il progetto Memory Analyzer a Eclipse, ha contribuito con loro da SAP.
Alcune delle cose che puoi fare sono straordinariamente buone per trovare perdite di memoria, ecc. - incluso l'esecuzione di una forma di SQL limitato (OQL) contro gli oggetti in memoria, ad esempio
SELEZIONA toString (nome) DA com.yourcompany.somepackage.User
Totalmente geniale.
Altri suggerimenti
Puoi utilizzare JHAT , The Java Heap Analysis Tool fornito di default con JDK. È la riga di comando ma avvia un server Web / browser che usi per esaminare la memoria. Non è il più facile da usare, ma almeno è già installato nella maggior parte dei luoghi in cui andrai. Una vista molto utile è l'istogramma "heap" link in fondo.
ex: jhat -port 7401 -J-Xmx4G dump.hprof
jhat
può eseguire OQL "in questi giorni" anche (link in basso " esegui OQL ")
Puoi anche utilizzare HeapWalker dal Netbeans Profiler o dal < a href = "https://visualvm.github.io/" rel = "noreferrer"> Visual VM strumento autonomo. Visual VM è una buona alternativa a JHAT in quanto è indipendente, ma è molto più facile da usare rispetto a JHAT.
Per utilizzare completamente Visual VM è necessario Java 6+.
Scarica Eclipse Memory Analyzer . Non c'è niente di meglio là fuori ed è gratuito.
JHAT è utilizzabile solo per "applicazioni giocattolo"
Anche YourKit Java Profiler sembra gestirli.
Se vuoi fare un'analisi personalizzata del tuo heapdump, allora c'è:
- Libreria JVM Heap Dump Analysis https : //github.com/aragozin/jvm-tools/tree/master/hprof-heap
Questa libreria è veloce ma dovrai scrivere il tuo codice di analisi in Java.
Dai documenti:
- Non crea alcun file temporaneo sul disco per elaborare il dump dell'heap
- Può funzionare direttamente dump di heap compressi GZ
- Notazione HeapPath