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システムの基礎とよく使うコマンドなどについて入門者向けに解説します。
コメント