Wie kann ich JVM bei OutOfMemoryError _nach dem Erstellen eines Heap-Abbilds erneut starten?

8

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" ?

    
Ztyx 29.05.2015, 12:49
quelle

3 Antworten

15
%Vor%

JVM wird zuerst den Heapspeicher ausgeben und dann OnOutOfMemoryError-Befehle ausführen (Beweis) .

    
apangin 29.05.2015, 20:34
quelle
4

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 )

    
flavio.donze 24.11.2016 16:02
quelle
0

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.

    
Marged 29.05.2015 14:06
quelle

Tags und Links