472
420

More than 5 years have passed since last update.

Linux OOM Killerについて

Last updated at Posted at 2014-10-05

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

参考図書

Linuxカーネル Hacks ―パフォーマンス改善、開発効率向上、省電力化のためのテクニック

472
420
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
472
420