earlyoom - 早期 OOM デーモン チートシート
earlyoom - 早期 OOM デーモン チートシート
earlyoom は軽量ユーザースペースデーモン — “メモリ不足時にシステム全体がフリーズした”という古典的 Linux 問題を防止。メモリが不足するとカーネル OOM killer は反応が遅すぎて、マシンがスラッシング で既に応答不可。earlyoom は空き RAM・スワップを監視し、設定可能閾値下落時に最大メモリ消費者を早期 kill — システムをハングではなく対話的保持。シンプル・依存関係なし・デスクトップ・サーバー広く使用。
インストール
| プラットフォーム | コマンド |
|---|---|
| Debian/Ubuntu | sudo apt install earlyoom |
| Fedora | sudo dnf install earlyoom(Fedora Workstation デフォルト) |
| Arch Linux | sudo 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 | メモリ報告間隔(秒) |
-n | kill でデスクトップ通知有効 |
-N COMMAND | kill 時にコマンド実行(例 カスタムアラート) |
--prefer REGEX | 名前マッチプロセス kill 優先 |
--avoid REGEX | 名前マッチプロセス kill 回避 |
-p | earlyoom に有利な 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
| 項目 | earlyoom | systemd-oomd | Kernel 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