いつの間にかTomcatがいなくなっている
状況
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でプロセスが殺される–>間違いでしたを参照のこと。