いつの間にかTomcatがいなくなっている

2018年10月28日

状況

CentOS-6上でこれが何度も起こるのだが、/var/log/messagesをみてみると、以下のようなメッセージが出ている。

Oct 13 08:58:52 www8321uj kernel: Out of memory: Kill process 2991 (java) score 105 or sacrifice child
Oct 13 08:58:52 www8321uj kernel: Killed process 2991, UID 0, (java) total-vm:3581524kB, anon-rss:197708kB, file-rss:208kB

Javaのバージョンは以下である。

java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

Tomcat以外にも別のJava製のデーモンが同じようにしていなくなってしまう。

原因

こんな書き込みがある。Linux OOM Killerについて

システムが停止する恐れのある場合、OOM Killerが問答無用で殺してしまう。

殺される可能性の高いプロセスの確認は以下。

dstat --top-oom

しかし、CentOS-6には、デフォルトでdstatコマンドが入っていない。

yum install dstat

以下のようにJavaだと言い続ける。

対応策

こんな書き込みがある。メモリが少ない環境でのJava8使用の注意点

ここでの結論としては、以下である。

  • Java8でメモリ構成が変わり、従来のパラメータでは不十分
  • XX:CompressedClassSpaceSizeのデフォルトが1GBであることが原因
  • -XX:CompressedClassSpaceSize=32あたりから始めてみた方がよい。
  • そもそも64bit-VMを使う必要もない。32ビットの方が小さくなる。
  • また、-XX:MetaspaceSizeがデフォルト値が小さめである。もう少し大きい方がよい。

実際にやってみたこと

startup.shの冒頭に以下を挿入

CATALINA_OPTS=-XX:CompressedClassSpaceSize=512m
export CATALINA_OPTS

結果的にこれでは問題の解決にならなかった。さくらVPSでプロセスが殺される–>間違いでしたを参照のこと。