Kann ich Tomcat jvm on out of memory Ausnahme automatisch starten
Ich weiß, dass dies keine "best practice", aber ich würde gerne wissen, ob ich das auto starten Sie tomcat neu, wenn meine bereitgestellte app wirft eine outofmemory-Ausnahme
InformationsquelleAutor der Frage Abe | 2011-09-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, verwenden Sie die OnOutOfMemoryError JVM-option
Ist es auch möglich, die Generierung der heap-dump für eine spätere Analyse:
Vorsichtig sein mit der Kombination dieser zwei Optionen. Wenn Sie erzwingen, dass die Tötung der Prozess der "tomcat-Neustart" die heap-dump möglicherweise nicht vollständig.
InformationsquelleAutor der Antwort Dan
Ich weiß, das ist nicht das, was Sie gefragt, aber Sie haben versucht, auf der Suche durch einen heap-dump zu sehen, wo Sie möglicherweise ein Speicherleck?
Einige sehr nützliche tools zum aufspüren von Speicher-Lecks:
Dadurch erhalten Sie ein Histogramm, Leben alle Objekte, die sich derzeit in der JVM. Blick für alle ungeraden Objekt zählt. Sie müssen wissen, Ihre Anwendung ziemlich gut bestimmen zu können, was für ein Objekt zählt, sind ungerade.
Dieser dump wird der gesamte heap der JVM identifiziert durch pid. Sie können dann nutzen Sie die große Eclipse Memory Analyzer , überprüfen Sie es und finden Sie heraus, wer hält Referenzen auf Ihre Objekte. Ihre zwei größten Freunde in Eclipse Memory Analyzer sind die histo-Gramm und eine
right click -> references -> exclude weak/soft references
um zu sehen, was auf Ihr Objekt.jconsole ist natürlich ein weiteres gutes tool.
InformationsquelleAutor der Antwort Matt Crinklaw-Vogt
nicht einfach, und definitiv nicht durch die JVM, die nur erlitten, die out-of-memory-Ausnahme. Ihre beste Wette wäre, eine Kombination von tomcat status monitor gepaart mit cron-Skripte oder Verwandte geplante system-administrator-scripts; etwas so überprüfen Sie den status des Servers und automatisch stoppen und starten Sie den Dienst neu, wenn es versagt hat.
InformationsquelleAutor der Antwort mcfinnigan
In der Regel, Nein. Die VM ist in einem schlechten Zustand, und kann nicht vollständig vertraut werden.
In der Regel kann man über ein konfigurierbares wrapper-Prozess startet und beendet die "echte" server-VM, die Sie wollen. Ein Beispiel ich habe mit "Java Service Wrapper von Tanuki Software http://wrapper.tanukisoftware.com/doc/english/download.jsp
Ich weiß, es gibt andere.
Zum Schutz gegen OOMs in der ersten Stelle gibt es Möglichkeiten, instrument moderner VMs über eine Schnittstelle Bohnen zum Abfragen des status des heap-und anderen Speicher-Strukturen. Diese können verwendet werden, um, sagen wir, warnen Sie in einem Protokoll oder einer E-Mail, wenn einige app-spezifische Operationen drängen einige etablierte Grenzen.
InformationsquelleAutor der Antwort clvrmnky
Leider beim töten der java-Prozess. Dein script wird immer eine Referenz auf das tomcat-ports 8080 8005 8009, und Sie werden nicht in der Lage sein, um es zu starten wieder aus das gleiche script. Der einzige Weg, es funktioniert bei mir:
-XX:OnOutOfMemoryError="kill -9 %p" und dann noch cron oder monit oder etwas ähnliches, um sicherzustellen, haben Sie die tomcat läuft wieder.
%p ist eigentlich die JVM pid , etwas, das die JVM bietet für Sie.
InformationsquelleAutor der Antwort Georgi Ivanov
Was ist mit soetwas?
-XX:OnOutOfMemoryError="exec \`ps --no-heading -p $$ -o cmd\`"
InformationsquelleAutor der Antwort Nitroware