choom unter Linux: OOM-Score anpassen und Prozesse schützen

Überblick und Funktionsweise

Sobald der physische Arbeitsspeicher eines Linux-Systems erschöpft ist, greift der Out-of-Memory-Mechanismus (OOM-Killer) des Kernels ein und beendet gezielt Prozesse, um einen totalen Kernel-Absturz abzuwenden. Das Dienstprogramm choom bietet Administratoren eine unkomplizierte Schnittstelle, um diesen Auswahlprozess über Anpassungswerte präzise zu steuern. Die folgende Anleitung zeigt praxisnah auf der Konsole, wie Sie bestehende Prozesse bewerten, deren Priorität verschieben und kritische Dienste bereits beim Start wirksam vor dem OOM-Killer absichern.

1. Grundlagen zu choom und Vorbereitung der Umgebung

Für den Einsatz von choom sowie für die begleitenden Kontrollschritte werden Werkzeuge aus den Programmsammlungen util-linux und procps benötigt. Die Bereitstellung erfolgt über die Paketverwaltung:

Paketinstallation für util-linux und procps

Das Dienstprogramm choom dient primär dazu, das Kernel-Attribut oom_score_adj abzufragen oder zur Laufzeit neu zu definieren. Dieser Wert bestimmt maßgeblich, welche Tasks im Notfall zuerst terminiert werden.
Ein Aufruf mit dem Schalter --help verschafft einen schnellen Überblick über die verfügbare Befehlssyntax:
⚙️ [Zentrale Parameter]

-p, --pid : Legt die Prozess-ID (PID) der gewünschten Zielanwendung fest.
-n, --adjust : Konfiguriert die Verschiebung des OOM-Scores im Wertebereich von -1000 bis 1000.
-h, --help : Ruft die integrierte Kurzhilfe auf.
-V, --version : Gibt Versionsinformationen des Werkzeugs aus.

Befehlshilfe von choom aufrufen

2. Den aktuellen OOM-Score eines laufenden Prozesses auslesen

Zur Demonstration der Parameteranalyse starten wir zunächst einen harmlosen Hintergrundjob mit einer Laufzeit von zehn Minuten via sleep 600 &:

Start eines Testprozesses im Hintergrund

Anschließend wird die Prozess-ID dieses Testjobs ermittelt, in der Umgebungsvariable TARGET_PID hinterlegt und der aktuelle Wert für oom_score_adj mittels choom -p abgefragt.
Standardmäßig weisen neu gestartete Benutzerprozesse hier den neutralen Vorgabewert 0 auf.

Auslesen des OOM-Scores über choom

Um sicherzustellen, dass die Ausgabe von choom exakt den Kernel-Zustand widerspiegelt, empfiehlt sich ein Gegenabgleich im virtuellen Dateisystem /proc.
Ein Blick in die Datei oom_score_adj des Zielprozesses bestätigt den Wert 0, womit Konsistenz zwischen Userspace-Tool und Kernel-Parameter belegt ist.

Gegenprüfung des Werts im proc-Dateisystem

3. Den OOM-Score dynamisch mit choom modifizieren

Soll ein Prozess im Falle knapper Speicherressourcen bevorzugt geopfert werden, lässt sich dessen Schutzwert über die Option -n anheben. Hierzu führen wir choom mit dem Zielwert 500 unter sudo-Berechtigung aus.
Positive Werte erhöhen die Wahrscheinlichkeit drastisch, dass der OOM-Killer diesen Dienst bei Speichermangel als Erstes liquidiert.

OOM-Score des Zielprozesses auf 500 setzen

Die erfolgreiche Übernahme des neuen Wertes wird durch eine erneute Abfrage mittels choom -p validiert.
Das Terminal bestätigt den unmittelbaren Wechsel von der Basisstufe 0 auf die verschärfte Prioritätsstufe 500.

Verifikation des modifizierten OOM-Werts

4. Prozesse direkt geschützt starten und Testumgebung bereinigen

Unternehmenskritische Hintergrunddienste sollten oft von vornherein vor dem OOM-Mechanismus abgeschirmt werden. Indem wir den minimal möglichen Score-Wert von -1000 vorgeben, wird das Programm direkt beim Initialisieren immunisiert.
Die Zuweisung von -1000 signalisiert dem Linux-Kernel, dass dieser Task selbst bei extremem Speichernotstand unter keinen Umständen beendet werden darf.

Prozessstart mit absolutem OOM-Schutz

Zur Überprüfung lesen wir die PID der geschützten Instanz erneut in TARGET_PID ein und kontrollieren die Konfiguration über choom -p.
Die Rückmeldung -1000 verdeutlicht, dass die Ausnahmebehandlung ab der ersten Millisekunde der Prozessausführung greift.

Kontrolle der Immunisierung gegen OOM-Kills

Nach Abschluss der Übungen empfiehlt sich das Aufräumen nicht mehr benötigter Hintergrundjobs über den Befehl pkill -f 'sleep 600' || true.
Damit wird das Testprogramm sauber gestoppt und die Systemressourcen bleiben aufgeräumt.

Beenden der verbliebenen Testprozesse

Mit choom steht Systemadministratoren ein schlankes Bordmittel zur Verfügung, um das Verhalten des Linux OOM-Killers zielgerichtet zu steuern. Eine fein abgestimmte Priorisierung sorgt dafür, dass geschäftskritische Daemons selbst unter Last stabil weiterarbeiten, während entbehrliche Prozesse kontrolliert abgefangen werden.