Linuxのchoomコマンド入門:OOM Killerスコア調整とプロセス保護

概要

Linux環境で物理メモリが枯渇した際、カーネルのOOM(Out of Memory)Killerがどのプロセスを強制停止するかは内部スコアによって決定されます。本記事では、この優先度パラメータを自在に制御できるユーティリティ choom の実践的な使い方を解説します。稼働中プロセスのスコア参照から優先順位の変更、さらには重要タスクをあらかじめ強制終了から保護して立ち上げる手法まで、コマンドライン操作を通じて段階的に身につけましょう。

1. choomコマンドの準備と基本仕様

動作検証およびプロセス監視をスムーズに行えるよう、ベースパッケージである util-linux と procps をシステムへ導入・更新します。

パッケージの更新と必須ツールの導入

choom は、Linuxカーネルがプロセスを強制終了する基準値(oom_score_adj)を直接読み書きするためのツールです。
まずは --help オプションを指定して、利用可能な主要フラグと構文仕様を確かめておきましょう。
⚙️ [主要オプション一覧]

-p, --pid : 調査または調整の対象となるプロセスID(PID)を指定します。
-n, --adjust : OOMスコアの補正値(-1000から1000の整数)を設定します。
-h, --help : コマンドのヘルプメッセージを表示します。
-V, --version : 導入されているツールのバージョン情報を確認します。

choomのヘルプ表示

2. 稼働中プロセスのOOMスコアを確認する

検証用の対象として、10分間バックグラウンドで待機し続けるダミープロセスを sleep 600 & で立ち上げます。

テスト用バックグラウンドプロセスの起動

直前に起動したプロセスのPIDを特定して変数 TARGET_PID に格納し、choom -p を使って現在の調整値(oom_score_adj)を問い合わせてみます。
ユーザー側で明示的な設定を行っていない通常のプロセスであれば、デフォルトの初期値である 0 が返されます。

choomを用いたOOMスコア調整値の確認

choom が示した出力値の妥当性を検証するため、Linuxの /proc 仮想ファイルシステム上に存在する oom_score_adj を直接読み出してみましょう。
コマンドの実行結果と同様に 0 が記録されており、カーネルパラメータの状態が正確に反映されていることが裏付けられます。

procファイルシステムからの直接値確認

3. プロセスのOOMスコアを動的に書き換える

対象プロセスの強制終了順位を引き上げるため、管理者権限(sudo)のもと -n オプションで 500 を付与して choom を実行します。
oom_score_adj に正の大きな値を割り当てると、メモリ逼迫時にカーネルから真っ先に停止候補として狙われるようになります。

choomによるOOM調整値の変更

設定値がカーネルへ即座に反映されたかを確かめるため、再度 choom -p で対象のPIDを照会します。
出力が初期値の 0 から指定した 500 へと切り替わっており、プロセスの強制停止優先度が意図通り引き上げられたことが確認できます。

変更後のOOMスコア再照会

4. プロセス起動時の保護設定と検証環境の後始末

サービス停止が許されない重要プロセスについては、起動と同時にOOM Killerの対象から完全に除外するよう、調整値に -1000 を指定してバックグラウンド実行します。
最小値である -1000 をセットされたタスクは、システムがどれほど極限のメモリ不足に陥ってもカーネルから強制終了されず、安全に稼働を継続できます。

OOM保護設定を付与したプロセスの新規起動

起動した保護プロセスのPIDを変数 TARGET_PID へ再割り当てし、choom -p を実行して設定状態を検証します。
事前の指定通り -1000 が正しく記録されており、プロセスの生成と同時にOOM耐性が確実に有効化されたことが分かります。

保護設定が適用されたプロセスのスコア検証

すべての動作確認を終えたら、検証用に起動しておいたバックグラウンドの待機タスクを pkill -f 'sleep 600' || true で一括停止します。
テスト用の不要な残存プロセスを速やかに破棄し、システムリソースを正常な状態へ戻しておきましょう。

検証プロセスのクリーンアップ実行

本ガイドでは、choom コマンドを活用したOOMスコアの監視と、ミッションクリティカルなプロセスの保護手順を学びました。
サーバーの運用要件に合わせて各デーモンの優先順位をきめ細かくチューニングし、メモリ逼迫時でもダウンタイムを最小限に抑える堅牢なシステム基盤を構築してください。