【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入門】Linuxの基礎と試験範囲別の解説
LPICに従って、Linuxの基礎と試験範囲別の解説についてまとめました。
【Linuxコマンド入門】主なコマンドとサンプル集
Linuxコマンドの主な使い方とサンプル集について入門者向けにまとめました。
UNIX
スポンサーリンク

コメント