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
| Platform | Command |
|---|---|
| Debian/Ubuntu | sudo apt install earlyoom |
| Fedora | sudo dnf install earlyoom (Standard auf Fedora Workstation) |
| Arch Linux | sudo pacman -S earlyoom |
| From source | make && sudo make install aus dem Repo |
| Verify | earlyoom --version |
Enabling the Service
| Command | Beschreibung |
|---|---|
sudo systemctl enable --now earlyoom | Aktiviere und starte den Daemon |
sudo systemctl status earlyoom | Überprüfe, dass er läuft |
journalctl -u earlyoom -f | Überwache seine Entscheidungen live |
earlyoom | Führe im Vordergrund aus (Testen) |
How It Decides
earlyoom beobachtet zwei Zahlen und handelt, wenn beide unter ihre Schwellwerte fallen:
| Metric | Flag | Default-ish |
|---|---|---|
| Free RAM % | -m PERCENT | z.B. 10% |
| Free swap % | -s PERCENT | z.B. 10% |
| Kill trigger | beide unter Schwellwerte | — |
# Kill when RAM < 5% AND swap < 5%
earlyoom -m 5 -s 5
Key Options
| Option | Beschreibung |
|---|---|
-m PERCENT[,KILL] | RAM-Schwelle zum Warnen/Töten (zwei Werte = Warn,Kill) |
-s PERCENT[,KILL] | Swap-Schwelle zum Warnen/Töten |
-M SIZE | RAM-Schwelle in KiB anstelle von Prozentsatz |
-r INTERVAL | Memory Report Intervall (Sekunden) |
-n | Aktiviere Desktop-Benachrichtigungen beim Töten |
-N COMMAND | Führe einen Befehl beim Töten aus (z.B. benutzerdefinierte Warnung) |
--prefer REGEX | Bevorzuge Prozesse, die einem Namen entsprechen zu töten |
--avoid REGEX | Vermeide Prozesse, die einem Namen entsprechen zu töten |
-p | Gebe earlyoom selbst einen vorteilhaften OOM-Score |
-d | Aktiviere 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)$'
| Directive | Effekt |
|---|---|
--prefer | Töte diese zuerst wenn möglich |
--avoid | Tö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
| Aspect | earlyoom | systemd-oomd | Kernel OOM Killer |
|---|---|---|---|
| Layer | Userspace Daemon | Userspace (systemd, PSI-basiert) | Kernel |
| Trigger | Freier RAM/Swap % | Pressure Stall Info (PSI) | Wirklich kein Speicher (spät) |
| Granularität | Prozess (Größter) | cgroup/Unit | Prozess |
| Config | Einfache Flags | systemd oomd Policy | Begrenzt (oom_score_adj) |
| Best for | Einfach, effektives Sicherheitsnetz | systemd-verwaltete cgroups | Letzter 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