Mir wurde gesagt, ich kann das hinzufügen -XX:+HeapDumpOnOutOfMemoryError
Parameter zu meinen JVM-Startoptionen zu meinem JBoss-Startskript, um einen Heap-Dump zu erhalten, wenn wir in unserer Anwendung einen Fehler wegen unzureichendem Arbeitsspeicher erhalten. Ich frage mich, wo diese Daten abgelegt werden? Geht es nur um die Konsole oder um eine Protokolldatei? Wenn es nur um die Konsole geht, was ist, wenn ich nicht über die Konsole beim Unix-Server angemeldet bin?
Verwendung des HeapDumpOnOutOfMemoryError-Parameters für Heap-Dump für JBoss
Matt Solnit
Hier ist was Dokumentation von Oracle muss sagen:
Standardmäßig wird der Heap-Dump in einer Datei namens java_ erstellt.PID.hprof im Arbeitsverzeichnis der VM, wie im obigen Beispiel. Sie können einen alternativen Dateinamen oder ein Verzeichnis mit angeben
-XX:HeapDumpPath=
Möglichkeit. Beispielsweise-XX:HeapDumpPath=/disk2/dumps
bewirkt, dass der Heap-Dump in der generiert wird/disk2/dumps
Verzeichnis.
-
Dies listet auch alle VM-leistungsbezogenen Optionen auf: java.sun.com/javase/technologies/hotspot/…
– Ravi Gupta
7. Januar 10 um 11:00 Uhr
-
Wichtig! Die HeapDump-Flags sind erst ab Java 1.5.0_07 verfügbar.
– rostig
17. September 12 um 15:53 Uhr
-
Es ist auch wichtig zu erkennen, dass die JVM einen vorhandenen Heap-Dump in der nicht überschreibt
HeapDumpPath
sehen Sie etwas Ähnliches wie"Unable to create /tmp/java_pidpid.hprof: File exists"
in Ihrem Standard aus. Stellen Sie sicher, dass Sie Ihre Dump-Datei aus dem Dump-Pfad verschieben, um den Weg für zukünftige Dump-Dateien freizumachen; und nutzen Sie die<pid>
Platzhalter im Dateinamen, um die Entropie im Dateinamen zu erhöhen.– Ben
16. November 13 um 1:41 Uhr
-
Es war äußerst nützlich. Es dauerte nur wenige Minuten, um das Leck mit Eclipse Memory Analyzer zu finden.
– Aron Lorincz
9. Juni 15 um 14:03 Uhr
-
Was passiert, wenn wir einen Pfad zu einem Ordner angeben, der nicht im System existiert? Wird es einen Ordner erstellen und den Hump-Dump in diesen Ordner verschieben?
– Vinit89
30. Mai ’18 um 13:33 Uhr
Swaminathan Krishnamoorthi
Sie können diesen Dump über die UNIX-Konsole anzeigen.
Der Pfad für den Heap-Dump wird als Variable bereitgestellt, direkt nachdem Sie die erwähnte Variable platziert haben.
Z.B:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps"
Sie können den Dump von der Konsole aus unter dem angegebenen Pfad anzeigen.
Ich fand es schwer zu entschlüsseln, was mit “Arbeitsverzeichnis der VM” gemeint ist. In meinem Beispiel habe ich das Java Service Wrapper-Programm verwendet, um eine JAR-Datei auszuführen – die Dump-Dateien wurden in dem Verzeichnis erstellt, in dem ich das Wrapper-Programm platziert hatte, zB c:myappbin. Der Grund, warum ich das entdeckt habe, ist, dass die Dateien ziemlich groß sein können und die Festplatte gefüllt haben, bevor ich ihren Speicherort entdeckt habe.
-
Ihr Arbeitsverzeichnis finden Sie über den Befehl pwdx
. Führen Sie zuerst ein ps -ef| aus grep java, finden Sie Ihre PID für Ihre Java-App und führen Sie dann pwdx aus. Es wird Ihnen das Arbeitsverzeichnis mitteilen. – RCG
5. Dezember 18 um 16:55 Uhr
Wenn Sie die Option „-XX:HeapDumpPath“ nicht verwenden, wird im Fall von JBoss EAP/As standardmäßig die Heap-Dump-Datei im Verzeichnis „JBOSS_HOME/bin“ generiert.
Wenn Sie nur den Parameter -XX:+HeapDumpOnOutOfMemoryError konfigurieren, wird Heapdump im Verzeichnis JBOSS_HOME/bin für OpenJDK/Oracle JDK generiert. Wenn Sie IBM JDK verwenden, wird Heapdump im Verzeichnis /tmp als Phd-Datei erstellt. Die Option -XX:HeapDumpPath gibt uns mehr Möglichkeiten zum Konfigurieren unseres benutzerdefinierten Headpump-Pfads (-XX:HeapDumpPath=/my-custom-jboss-server-path/). Es wird empfohlen, diesen Parameter in Ihrer Umgebung zu konfigurieren, da er Heapdump bei OutOfMemory-Fehlern sammelt, um das Problem mit Speicherverlusten der Anwendung zu analysieren oder die Aufbewahrung großer Objekte in der Anwendung zu überprüfen.
.
Das ist der aktuelle Ordner, denke ich.
– Walentin Tihomirov
10. Dezember 15 um 15:29 Uhr