VirtualBox上の開発環境にいつもどおりsshしようとしたある日、まったく反応が返ってこなくなりました。pingは通るので、コンソールからログを見てみたところOOM killerが動いているようでした。
sshできないとどうにもならないので、とりあえず再起動。今後のためにもOOM killerの活動をある程度制御することにしました。
簡単に言えば、OOM killerはメモリを食い散らかすプロセスをkillしてシステム全体を守るものです(詳細は先人の素晴らしい記事を参照してください)。とはいえなんでもかんでもkillされては困るので、優先度を制御します。今回の環境ではsshdもkill対象に入っていたので、今後対象から外れるようにします。
やることは簡単で、
ps aux | grep ssh | grep -v grep
などで対象のPIDを検索echo -1000 > /proc/${pid}/oom_score_adj
などでoom_score_adjに-1000と書き込む
だけです。
先述のように、今回の環境はsshdのoom_score_adjは0になっており、kill対象になっていました。-1000にすることで /proc/${pid}/oom_score
を補正し、OOM killerのkill対象から外すことができます。
- その51 プロセスを殺戮する恐怖のOOM killer - YouTube https://www.youtube.com/watch?v=D13PVCaHnk0