Ich kenne den -XX:+HeapDumpOnOutOfMemoryError
JVM-Parameter. Ich kenne auch -XX:OnOutOfMemoryError="cmd args;cmd args"
und kill -3 <JVM_PID>
fordert einen Heap-Dump an.
Frage: Wie kann ich sicherstellen, dass ich bei OutOfMemoryError
zuerst einen vollständigen Heapspeicherauszug mache und dann einen Neustart (oder Abbruch) nach dem Speicherauszug erzwinge erledigt? Ist meine beste Wette -XX:OnOutOfMemoryError="kill -3 %p;sleep <time-it-takes-to-dump>;kill -9 %p"
?
Wenn Sie nur herunterfahren möchten, können Sie einen der folgenden Parameter verwenden:
-XX:+ExitOnOutOfMemoryError
-XX:+CrashOnOutOfMemoryError
Die VM-Argumente wurden in der Java-Version 8u92 hinzugefügt, siehe Versionshinweise .
ExitOnOutOfMemoryError
Wenn Sie diese Option aktivieren, wird die JVM auf der erstes Auftreten eines nicht ausreichenden Speicherfehlers. Es kann verwendet werden, wenn Sie Ich möchte lieber eine Instanz der JVM neu starten, anstatt sie zu bearbeiten Speicherfehler.CrashOnOutOfMemoryError
Wenn diese Option aktiviert ist, wenn ein Out-of-Memory-Fehler tritt auf, die JVM stürzt ab und erzeugt Text und binäre Absturzdateien.
Verbesserungsanfrage: JDK-8138745 (Parameterbenennung ist falsch, obwohl JDK-8154713 , ExitOnOutOfMemoryError
anstelle von ExitOnOutOfMemory
)
Ich wette, die Runtime legt beim Absturz einen bestimmten Fehlerlevel fest. Suchen Sie nach diesem Rückgabecode und führen Sie das Programm in diesem Fall erneut aus. Du solltest das vielleicht in ein Skript schreiben.
Die Sonne jure erlaubt Ihnen, dump auf oome, vielleicht openjdk auch zu haufen.