Wie kann ich neu starten JVM mit OutOfMemoryError _after_ machen einen heap dump?
Weiß ich über die -XX:+HeapDumpOnOutOfMemoryError
JVM-parameter. Ich weiß auch um -XX:OnOutOfMemoryError="cmd args;cmd args"
und dass kill -3 <JVM_PID>
fordern einen heap-dump.
Frage: Wie kann ich sicherstellen, dass ich auf OutOfMemoryError
, machen Sie zuerst einen vollständigen Heapdump und dann einen Neustart zu erzwingen (oder töten) nach der dump fertig ist? Ist meine beste Wette -XX:OnOutOfMemoryError="kill -3 %p;sleep <time-it-takes-to-dump>;kill -9 %p"
?
- Wäre es nicht besser, überwachen den Prozess aus, ohne die jvm, und starten Sie ihn entsprechend, z.B. unix-Skript, monitorying system? wenn die jvm aus der Erinnerung ich würde mich nicht darauf verlassen, dass es in der Lage sein, um zuverlässig starten Sie einen Befehl, um sich selbst neu starten
Du musst angemeldet sein, um einen Kommentar abzugeben.
JVM wird die dump-heap ersten, und führen Sie dann OnOutOfMemoryError Befehle (Beweis).
Wenn Sie wollen einfach nur Herunterfahren Sie können verwenden Sie eine der folgenden Parameter:
-XX:+ExitOnOutOfMemoryError
-XX:+CrashOnOutOfMemoryError
Den VM-Argumente wurden in der Java-version 8u92 finden Sie in der release notes.
Verbesserung Anfrage: JDK-8138745 (parameter Benennung falsch ist, obwohl JDK-8154713,
ExitOnOutOfMemoryError
stattExitOnOutOfMemory
)Ich Wette, dass die Laufzeit setzt eine bestimmte errorlevel auf crash. Überprüfen, dass die Antwort-code und das Programm erneut ausführen, in diesem Fall. Sollten Sie vielleicht setzen Sie diese in einem Skript.
Die sun jre können Sie die heap-dump auf oome, vielleicht openjdk auch nicht.