Zum Inhalt springen

earlyoom - Early Out-of-Memory Daemon Cheatsheet

earlyoom - Early Out-of-Memory Daemon Cheatsheet

earlyoom ist ein leichter Userspace-Daemon, der das klassische Linux-Problem „das ganze System fror ein, als mir der RAM ausging” verhindert. Wenn der Speicher zur Neige geht, reagiert der in-Kernel OOM-Killer oft zu spät, nachdem die Maschine bereits durch Thrashing nicht ansprechbar ist. earlyoom überwacht verfügbaren RAM und Swap und tötet, wenn sie unter konfigurierbare Schwellwerte fallen, den größten Speicherverbraucher früh — hält das System interaktiv anstatt einzufrieren. Es ist einfach, abhängigkeitsfrei und weit verbreitet auf Desktops und Servern.

Installation

PlatformCommand
Debian/Ubuntusudo apt install earlyoom
Fedorasudo dnf install earlyoom (Standard auf Fedora Workstation)
Arch Linuxsudo pacman -S earlyoom
From sourcemake && sudo make install aus dem Repo
Verifyearlyoom --version

Enabling the Service

CommandBeschreibung
sudo systemctl enable --now earlyoomAktiviere und starte den Daemon
sudo systemctl status earlyoomÜberprüfe, dass er läuft
journalctl -u earlyoom -fÜberwache seine Entscheidungen live
earlyoomFühre im Vordergrund aus (Testen)

How It Decides

earlyoom beobachtet zwei Zahlen und handelt, wenn beide unter ihre Schwellwerte fallen:

MetricFlagDefault-ish
Free RAM %-m PERCENTz.B. 10%
Free swap %-s PERCENTz.B. 10%
Kill triggerbeide unter Schwellwerte
# Kill when RAM < 5% AND swap < 5%
earlyoom -m 5 -s 5

Key Options

OptionBeschreibung
-m PERCENT[,KILL]RAM-Schwelle zum Warnen/Töten (zwei Werte = Warn,Kill)
-s PERCENT[,KILL]Swap-Schwelle zum Warnen/Töten
-M SIZERAM-Schwelle in KiB anstelle von Prozentsatz
-r INTERVALMemory Report Intervall (Sekunden)
-nAktiviere Desktop-Benachrichtigungen beim Töten
-N COMMANDFühre einen Befehl beim Töten aus (z.B. benutzerdefinierte Warnung)
--prefer REGEXBevorzuge Prozesse, die einem Namen entsprechen zu töten
--avoid REGEXVermeide Prozesse, die einem Namen entsprechen zu töten
-pGebe earlyoom selbst einen vorteilhaften OOM-Score
-dAktiviere Debug-Ausgabe

Preferring / Avoiding Processes

# Prefer killing browsers/compilers; protect the display server and sshd
earlyoom -m 8 -s 8 \
  --prefer '(^|/)(chrome|firefox|cc1plus|java)$' \
  --avoid '(^|/)(Xorg|sshd|systemd)$'
DirectiveEffekt
--preferTöte diese zuerst wenn möglich
--avoidTöte diese nur als letzten Ausweg

Das Tuning dieser verhindert, dass ein Fehler-Prozess deine Session oder SSH-Zugang mit sich nimmt.

Configuration File

Auf systemd-Distros leben Optionen normalerweise in einer env-Datei:

# /etc/default/earlyoom  (Debian) oder die Unit''s EnvironmentFile
EARLYOOM_ARGS="-m 5 -s 5 -r 60 --avoid '(^|/)(sshd|Xorg)$'"

Dann sudo systemctl restart earlyoom.

earlyoom vs systemd-oomd vs kernel OOM

Aspectearlyoomsystemd-oomdKernel OOM Killer
LayerUserspace DaemonUserspace (systemd, PSI-basiert)Kernel
TriggerFreier RAM/Swap %Pressure Stall Info (PSI)Wirklich kein Speicher (spät)
GranularitätProzess (Größter)cgroup/UnitProzess
ConfigEinfache Flagssystemd oomd PolicyBegrenzt (oom_score_adj)
Best forEinfach, effektives Sicherheitsnetzsystemd-verwaltete cgroupsLetzter Ausweg

Auf modernen systemd-Distros ist systemd-oomd (PSI-basiert) eine Alternative; earlyoom bleibt für seine Einfachheit beliebt und funktioniert überall.

Common Workflows

# Desktop: keep the UI responsive, notify on kills, protect the session
earlyoom -m 8 -s 4 -n --avoid '(^|/)(Xorg|gnome-shell|sshd)$'

# Server: conservative thresholds, log every action
sudo systemctl enable --now earlyoom
journalctl -u earlyoom -f

Resources