コンテンツにスキップ

earlyoom - 早期 OOM デーモン チートシート

earlyoom - 早期 OOM デーモン チートシート

earlyoom は軽量ユーザースペースデーモン — “メモリ不足時にシステム全体がフリーズした”という古典的 Linux 問題を防止。メモリが不足するとカーネル OOM killer は反応が遅すぎて、マシンがスラッシング で既に応答不可。earlyoom は空き RAM・スワップを監視し、設定可能閾値下落時に最大メモリ消費者を早期 kill — システムをハングではなく対話的保持。シンプル・依存関係なし・デスクトップ・サーバー広く使用。

インストール

プラットフォームコマンド
Debian/Ubuntusudo apt install earlyoom
Fedorasudo dnf install earlyoom(Fedora Workstation デフォルト)
Arch Linuxsudo pacman -S earlyoom
ソースからリポジトリから make && sudo make install
確認earlyoom --version

サービス有効化

コマンド説明
sudo systemctl enable --now earlyoomデーモンを有効化・開始
sudo systemctl status earlyoom実行中確認
journalctl -u earlyoom -f判定をリアルタイム監視
earlyoomフォアグラウンド実行(テスト)

判定方法

earlyoom は 2 つの数字を監視して、両方閾値下落時に動作:

メトリックフラグデフォルトっぽい
空き RAM %-m PERCENT例 10%
空きスワップ %-s PERCENT例 10%
Kill トリガー両方閾値下落
# RAM < 5% かつ スワップ < 5% で kill
earlyoom -m 5 -s 5

キーオプション

オプション説明
-m PERCENT[,KILL]RAM 閾値 警告/kill(2 値 = 警告、kill)
-s PERCENT[,KILL]スワップ閾値 警告/kill
-M SIZEパーセント代わり KiB の RAM 閾値
-r INTERVALメモリ報告間隔(秒)
-nkill でデスクトップ通知有効
-N COMMANDkill 時にコマンド実行(例 カスタムアラート)
--prefer REGEX名前マッチプロセス kill 優先
--avoid REGEX名前マッチプロセス kill 回避
-pearlyoom に有利な OOM スコア与える
-dデバッグ出力有効

プロセス優先・回避

# ブラウザ/コンパイラを優先に kill。表示サーバー・sshd 保護
earlyoom -m 8 -s 8 \
  --prefer '(^|/)(chrome|firefox|cc1plus|java)$' \
  --avoid '(^|/)(Xorg|sshd|systemd)$'
ディレクティブ効果
--prefer可能時に最初に kill
--avoid最後の手段のみ kill

チューニングはランウェイプロセスがセッション・SSH アクセス一緒に取り込まれるのを保ちます。

設定ファイル

systemd distros では、オプションは env ファイルに通常住む:

# /etc/default/earlyoom  (Debian) または unit の EnvironmentFile
EARLYOOM_ARGS="-m 5 -s 5 -r 60 --avoid '(^|/)(sshd|Xorg)$'"

次に sudo systemctl restart earlyoom

earlyoom vs systemd-oomd vs kernel OOM

項目earlyoomsystemd-oomdKernel OOM killer
レイヤーユーザースペースデーモンユーザースペース(systemd、PSI ベース)Kernel
トリガー空き RAM/スワップ %Pressure Stall Info(PSI)メモリ本当に不足(遅)
粒度プロセス(最大)cgroup/unitプロセス
設定シンプルフラグsystemd oomd ポリシー制限(oom_score_adj)
最適用途シンプル・効果的安全ネットsystemd 管理 cgroups最後の手段

モダン systemd distros では、systemd-oomd(PSI ベース)が代替。earlyoom はシンプル・どこでも動作で人気継続。

一般的なワークフロー

# デスクトップ:UI 応答保持、kill で通知、セッション保護
earlyoom -m 8 -s 4 -n --avoid '(^|/)(Xorg|gnome-shell|sshd)$'

# サーバー:保守的閾値、すべてのアクション log
sudo systemctl enable --now earlyoom
journalctl -u earlyoom -f

リソース