Come posso salvare l'heap (dump in un file) in Eclipse?
-
10-07-2019 - |
Domanda
Ricevo questo errore quando eseguo o eseguo il debug di GA / AI da MyEclipse:
Eccezione nel thread "main" java.lang.OutOfMemoryError: spazio heap Java
eclipse.ini è simile al seguente:
-showsplash com.genuitec.myeclipse.product
--launcher.XXMaxPermSize 256m
-vmargs
-Xms128m
-Xmx512m
-Duser.language=en
-XX:PermSize=128M
-XX:MaxPermSize=256M
MyEclipse si chiama così:
"C:\Program Files\MyEclipse 6.0\eclipse\eclipse.exe" -vm "C:\Program Files\MyEclipse 6.0\jre\bin\javaw.exe" -vmargs -Xms1448M -Xmx1448M
aumentando le impostazioni di VM da questo:
"C:\Program Files\MyEclipse 6.0\eclipse\eclipse.exe" -vm "C:\Program Files\MyEclipse 6.0\jre\bin\javaw.exe" -vmargs -Xms80M -Xmx1024M
non ha avuto effetto. Quindi sto cercando di scaricarlo per scaricare l'heap in un file, ma inserendo questi:
-XX:+HeapDumpOnCtrlBreak
-XX:+HeapDumpOnOutOfMemoryError
negli argomenti del Programma non ha avuto effetto. Come faccio a far funzionare qualcosa con più analisi dell'utilizzo della memoria? jstack, ad esempio, non è attualmente disponibile su piattaforme Windows. E l'utilizzo di SendSignal non ha alcun effetto che posso vedere.
Soluzione
Esistono diversi modi per ottenere i dump dell'heap. Eccone alcuni che ho usato:
-
-XX: + HeapDumpOnOutOfMemoryError
dovrebbe scaricarti se colpisci la tua OOM. - Connettiti con VisualVM (gratuito) e usa la sua GUI per forzare un dump dell'heap
- Usa uno dei tanti buoni profiler commerciali (JProfiler, YourKit, ...)
- Usa jmap (vedi sotto) per forzare un dump da un processo in esecuzione
Se utilizzi Java 6, jmap dovrebbe funzionare su Windows. Questo potrebbe essere utile se vuoi scaricare l'heap e non hai colpito la tua OOM. Usa Task Manager di Windows per trovare il pid della tua app Java e in una console esegui questo:
jmap -dump:format=b,file=c:\heap.bin <pid>
Oltre a VisualVM, Eclipse Memory Analyzer (anche gratuito) può aiutarti ad analizzare cosa mangia tutto lo spazio una volta che hai la discarica.
Altri suggerimenti
-XX: + HeapDumpOnOutOfMemoryError
deve essere inserito in " Argomenti VM
" non " Argomenti del programma
"
È possibile monitorare l'utilizzo della memoria con JConsole.
Il jstat aiuterà anche .