ブラックボックス

プログラミングのノウハウやライフハックをどんどん投稿していきたい

Nov 8, 2021 - 2 minute read - ノウハウ

【Linux】プロセスをOOM Killerの対象外となるよう設定をする

何故か下書きのまま公開していなかった……。

Linuxに備わっているOOM Killer(Out of Memory Killer)というメモリ不足を防止する機能ですが、必要なプロセスまで終了させてしまうことがあります。
NginxやらMySQLを詰め込んだ環境でMySQLが強制終了されてしまい、障害発生といった事例もあった為、OOM Killerで強制終了をしないような設定をしたのでメモとして残す。

※そもそもそうなる前にメモリを増設するなど見直しが必要かとは思いますが。

参考:TIPS: 特定のプロセスをOOM Killerの対象から外す

念の為OOM Killerが強制終了をしたログを確認してみる。

$ sudo cat /var/log/messages | grep Killed
Jul 1 00:33:08 ip-xxx-xxx-xxx-xxx kernel: [5125455.462923] Killed process 2144 (mysqld) total-vm:1792588kB, anon-rss:21376kB, file-rss:0kB, shmem-rss:0kB
Jul 4 00:33:14 ip-xxx-xxx-xxx-xxx kernel: [5384661.181682] Killed process 22136 (mysqld) total-vm:1787936kB, anon-rss:11320kB, file-rss:0kB, shmem-rss:0kB
Jul 4 00:33:48 ip-xxx-xxx-xxx-xxx kernel: [5384694.914616] Killed process 29035 (mysqld) total-vm:383452kB, anon-rss:292196kB, file-rss:4kB, shmem-rss:0kB

どうやら3回強制終了されていたよう。

MySQLを起動し、OOM Killerの設定にはプロセスID(PID)が必要な為psコマンドで確認、PIDが30046であることを確認した後に下記コマンドを入力。

$ sudo sh -c "echo -1000 > /proc/30046/oom_score_adj"

上記実行後は停止することなく動作している。

コマンドの_30046_はPIDにより異なるので、設定したいプロセスのPIDに変えてください、と念の為。