OOMとは?
Linuxは、メモリが不足してシステムが停止する恐れがある際、メモリリソースを多く消費しているプロセスを強制的に殺します。これをOOM Killerといいます。重要なプロセスでも問答無用で殺しにきます。
いるはずのプロセスがある日消えていたのなら、それはOOM Killerに殺されたのかもしれません
確認方法(CentOS)
5789のrubyのプロセスが殺されたことが分かります
$ sudo cat /var/log/messages | grep Killed
Oct 1 11:11:54 ip-xx-xx-xx-xx kernel: [1983378.957901] Killed process 5789 (ruby) total-vm:4957320kB, anon-rss:2717004kB, file-rss:0kB
Ubuntuなら/var/log/syslog
殺される可能性の高いプロセス
dstatの--top-oomオプションで簡単に候補を確認できます
これは/proc/PID/oom_scoreを見ています
$ dstat --top-oom
--out-of-memory---
kill score
mysqld 484
mysqld 484
mysqld 484
対応策
mysqldとかを殺されるとさすがに困るので、強制終了するプロセスの優先度を決めることもできます
/proc/PID/oom_adjに(優先度低)-16から+15(優先度高)の値を設定することで優先度を設定できます
また、-17を設定するとOOM Killerの対象外になります
$ cat /proc/3333/oom_score
2000
$ echo -4 > /proc/3333/oom_adj
$ cat /proc/3333/oom_score
100