【Linux】OOM Killerとは?プロセスの優先度・スコア確認および変更

LinuxのOOM Killerとは?プロセスの優先度・スコア確認および変更方法についてまとめました。

OOM Killer

OOM Killer(Out of Memory Killer)とは、システムが実メモリーとスワップ領域(仮想メモリー空間)を使い果たし、必要なメモリー領域を新たに確保できない場合、稼働中のプロセスを強制終了させて空きメモリーを確保するLinuxカーネルの仕組みです。
強制終了させるプロセスは、優先度やスコアをもとにして判断して選択され、システム全体が停止するのを防ぎます。

終了したプロセスの確認

$ cat /var/log/messages | grep Killed

プロセスの優先度とスコアの確認と変更

プロセスの優先度とスコアは以下から確認できます。

プロセスの優先度 → 「/proc/プロセスID/oom_score_adj」
プロセスのスコア → 「/proc/プロセスID/oom_score」

例えば、httpdプロセスの優先度とスコアは以下のコマンドで確認できます。

$ ps -ef | grep httpd
pi  372317  365687  0 16:05 pts/9    00:00:00 grep --color=auto httpd

httpdプロセスのプロセスIDは「365687」なので、以下のコマンドで優先度とスコアを確認します。

$ cat /proc/365687/oom_score_adj
0

$ cat /proc/365687/oom_score
667

httpdプロセスの優先度は0、スコアは667であり、プロセス停止の対象となりやすいことがわかります。
OOM Killerによりhttpdプロセスを停止させたくない場合、優先度を上げる必要があります。
優先度を変更するためには、値に-1000をセットする必要があります。

$ echo -1000 > /proc/365687/oom_score_adj

systemd(systemctl)で起動しているサービスは、ユニットファイルの[Service]セクションに「OOMScoreAdjust=-1000オプション」を追記し、「systemctl daemon-reload」コマンドを実行してでユニットファイルをリロードしてからサービスを再起動します。

【実行例】httpdプロセスの確認と優先度の変更

$ systemctl status httpd
● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-11-07 00:39:14 UTC; 2 days ago ...

$ vi /usr/lib/systemd/system/httpd.service

(略)

[Service]

(略)

OOMScoreAdjust=-1000

(略)



$ systemctl daemon-reload

$ systemctl restart httpd

関連ページ

LinuCの試験対策と例題まとめ
LinuCの試験対策と例題(学習サイト)についてまとめました。
LPICの試験対策と例題まとめ
LPICの試験対策と例題(学習サイト)についてまとめました。
【Linux超入門】システムの基礎とよく使うコマンドなど徹底解説
Linuxシステムの基礎とよく使うコマンドなどについて入門者向けに解説します。

コメント