2009-02-12 3 views
150

Mir wurde gesagt, dass ich die -XX:+HeapDumpOnOutOfMemoryError Parameter zu meinen JVM Startoptionen zu meinem JBoss Start-Skript hinzufügen können, um einen Heap-Dump zu bekommen, wenn wir einen Speicherfehler in unserer Anwendung erhalten. Ich habe mich gefragt, wo diese Daten verloren gehen? Ist es nur für die Konsole oder für eine Protokolldatei? Wenn es nur an der Konsole ist, was passiert, wenn ich nicht über die Konsole am Unix-Server angemeldet bin?Verwenden HeapDumpOnOutOfMemoryError Parameter für Heap-Dump für JBoss

+1

Das ist der aktuelle Ordner, denke ich. –

Antwort

204

Hier ist, was Oracle's documentation zu sagen hat:

standardmäßig die Heapdump in eine Datei namens erstellt java_ pid .hprof im Arbeitsverzeichnis der VM, wie in dem Beispiel oben . Sie können einen alternativen Dateinamen oder das Verzeichnis mit der Option -XX:HeapDumpPath= angeben. Für Beispiel -XX:HeapDumpPath=/disk2/dumps wird dazu führen, dass der Heapspeicherauszug im /disk2/dumps Verzeichnis generiert wird.

+14

Hier werden auch alle VM-Leistungsoptionen aufgeführt: http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp#PerformanceTuning –

+4

Wichtig! Die HeapDump-Flags sind nur von Java 1.5.0_07 verfügbar. – rustyx

+11

Außerdem ist es wichtig zu erkennen, dass die JVM einen vorhandenen Heap-Dump NICHT im 'HeapDumpPath' überschreibt. Sie werden etwas sehen, das ähnlich ist wie" /tmp/java_pidpid.hprof: Datei existiert "in Ihrer Standardausgabe. Stellen Sie sicher, dass Sie Ihre Dump-Datei aus dem Dump-Pfad verschieben, um den Weg für zukünftige Dump-Dateien frei zu machen. und verwenden Sie den '' Platzhalter im Dateinamen, um die Entropie im Dateinamen zu erhöhen. – Ben

38

Sie können diesen Speicherauszug von der UNIX-Konsole aus anzeigen.

Der Pfad für den Heapspeicherauszug wird direkt nach dem Platzieren der Variablen als Variable bereitgestellt.

Z. B .:

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

Sie können auf dem genannten Weg der Müllkippe von der Konsole anzuzeigen.

2

Ich fand es schwierig zu entziffern, was mit "Arbeitsverzeichnis der VM" gemeint ist. In meinem Beispiel verwendete ich das Java Service Wrapper-Programm, um ein jar auszuführen - die Speicherauszugsdateien wurden in dem Verzeichnis erstellt, in dem ich das Wrapper-Programm abgelegt hatte, z. c: \ myapp \ bin. Der Grund, warum ich das entdeckt habe, liegt darin, dass die Dateien ziemlich groß sein können und sie die Festplatte füllten, bevor ich ihren Standort entdeckte.

1

Wenn Sie nicht die Option "-XX: HeapDumpPath" verwenden, wird im Falle von JBoss EAP/As die Heap-Dump-Datei standardmäßig im Verzeichnis "JBOSS_HOME/bin" generiert.