Utilizzo del parametro HeapDumpOnOutOfMemoryError per il dump dell'heap per JBoss


182

Mi è stato detto che posso aggiungere il -XX:+HeapDumpOnOutOfMemoryErrorparametro alle opzioni di avvio JVM al mio script di avvio JBoss per ottenere un dump dell'heap quando si verifica un errore di memoria insufficiente nella nostra applicazione. Mi chiedevo da dove venissero scaricati questi dati? È solo per la console o per alcuni file di registro? Se è solo per la console, cosa succede se non ho effettuato l'accesso al server Unix tramite la console?


1
Questa è la cartella corrente, immagino.
Valentin Tihomirov,

Risposte:


246

Ecco cosa dice la documentazione di Oracle :

Per impostazione predefinita, il dump dell'heap viene creato in un file chiamato java_ pid .hprof nella directory di lavoro della VM, come nell'esempio sopra. È possibile specificare un nome file o una directory alternativi con l' -XX:HeapDumpPath=opzione. Ad esempio -XX:HeapDumpPath=/disk2/dumps , il dump dell'heap verrà generato nella /disk2/dumps directory.


16
Questo elenca anche tutte le opzioni relative alle prestazioni della VM: java.sun.com/javase/technologies/hotspot/…
Ravi Gupta

4
Importante! I flag HeapDump sono disponibili solo da Java 1.5.0_07.
Rustyx,

14
Inoltre è importante riconoscere che JVM NON sovrascriverà un dump di heap esistente in HeapDumpPath, vedrai qualcosa di simile al "Unable to create /tmp/java_pidpid.hprof: File exists"tuo standard out. Assicurarsi di spostare il file di dump fuori dal percorso di dump per liberare la strada per eventuali file di dump futuri; e utilizzare il <pid>segnaposto nel nome del file per aumentare l'entropia nel nome del file.
Ben

1
È stato estremamente utile Ci sono voluti solo pochi minuti per trovare la perdita con Eclipse Memory Analyzer.
Aron Lorincz,

Cosa succede se diamo il percorso a una cartella che non esiste nel sistema? Creerà la cartella e spingerà il dump della gobba all'interno di quella cartella?
Vinit89,

47

È possibile visualizzare questo dump dalla console UNIX.

Il percorso per il dump dell'heap verrà fornito come variabile subito dopo il punto in cui è stata posizionata la variabile menzionata.

Per esempio:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps"

È possibile visualizzare il dump dalla console sul percorso indicato.


4

Ho trovato difficile decifrare cosa si intende per "directory di lavoro della VM". Nel mio esempio, stavo usando il programma Java Service Wrapper per eseguire un jar - i file di dump sono stati creati nella directory in cui avevo posizionato il programma wrapper, ad esempio c: \ myapp \ bin. Il motivo per cui l'ho scoperto è perché i file possono essere piuttosto grandi e hanno riempito il disco rigido prima che io scoprissi la loro posizione.


La tua directory di lavoro può essere trovata tramite il comando pwdx <PID>. Prima fai un ps -ef | grep java, trova il tuo PID per la tua app java, quindi esegui pwdx <PID>. Ti dirà la directory di lavoro.
RCG

2

Se non si utilizza l'opzione "-XX: HeapDumpPath", nel caso di JBoss EAP / come impostazione predefinita, il file di dump dell'heap verrà generato nella directory "JBOSS_HOME / bin".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.