BLOGTIMES
2019/03/14

Tomcat で OutOfMemoryError が出たときに自動で再起動させるようにする

  java  tomcat 
このエントリーをはてなブックマークに追加

Tomcat を長時間起動していると、メモリリークなどで OutOfMemoryError が出ることがあります。

これについてはログを監視して、デーモンを再起動させてやらないと対処できないと思っていたのですが、8u92 で追加された ExitOnOutOfMemoryError もしくは CrashOnOutOfMemoryError に関する JVM オプションをつけてあげれば、OOM が出たときに JVM が死ぬようにできることが分かったのでメモ。systemd などと組み合わせれば勝手に蘇らせてもらえるので対処も楽ちんですね。

Java™ SE Development Kit 8, Update 92 Release Notes

New JVM Options added: ExitOnOutOfMemoryError and CrashOnOutOfMemoryError
Two new JVM flags have been added:
  • ExitOnOutOfMemoryError - When you enable this option, the JVM exits on the first occurrence of an out-of-memory error. It can be used if you prefer restarting an instance of the JVM rather than handling out of memory errors.
  • CrashOnOutOfMemoryError - If this option is enabled, when an out-of-memory error occurs, the JVM crashes and produces text and binary crash files (if core files are enabled).

See JDK-8138745.

具体的には JVM オプションに以下のいずれかの指定を入れてやればOKです。

-XX:+CrashOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError

参考


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10832
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン