Software::Systemverwaltung
Facebook stellt OOM-Killer-Daemon vor
Wenn dem Linux-Kernel der Speicher ausgeht, weil die Anwendungen zuviel davon belegt haben, müssen speicherhungrige Anwendungen beendet werden. Der OOM-Killer von Facebook erledigt das als Daemon, der zuverlässiger und sehr viel flexibler als die Kernel-Lösung sein soll.
Larry Ewing
Wenn eine Anwendung übermäßig viel Speicher belegt, kann ein Grund dafür ein Programmierfehler sein. Es kann aber auch ein Angriff auf das Programm vorliegen, oder ein übergeordneter Job-Scheduler hat zuviele Prozesse auf einen Rechner gelegt. Letzteres scheint bei Facebook vorzukommen, das nach eigenen Angeben Millionen von Rechnern betreibt, die nicht alle denselben Versionsstand haben.
Wenn aber dieser Fall eintritt und dem Kernel freier Speicher fehlt, dann laufen Maßnahmen an, Speicher freizumachen, beispielsweise durch Swapping. Doch Swapping ist extrem langsam und kann den Rechner für lange Zeit nahezu zum Stillstand bringen. Hilft auch das nicht weiter, wählt schließlich der im Kernel eingebaute OOM-Killer einen oder mehrere Prozesse aus, die gewaltsam beendet werden.
Der Kernel-OOM-Killer funktioniert nach Angaben von Facebook in einigen Fällen gut, kommt aber in anderen Fällen zu spät. Daher hat Facebook einen neuen OOM-Killer entwickelt, der als Daemon läuft. Das hat laut Facebook zwei große Vorteile: Der Daemon hat eine bessere Sicht auf die Prozesse und er ist wesentlich flexibler.
Technisch wird dies durch eine Plugin-Architektur erreicht. Plugins können sowohl die Erkennung von Speichermangel-Situationen als auch die Reaktion darauf, einschließlich der Auswahl der zu beendenden Prozesse, definieren. Somit lässt sich der Daemon genau an die Bedürfnisse einer Organisation anpassen.
Damit der OOM-Killer-Daemon funktioniert, benötigt er zwei Neuerungen im Kernel. Pressure Stall Information (PSI), das von Johannes Weiner bei Facebook entwickelt wurde und noch nicht, aber hoffentlich bald, im offiziellen Kernel vorhanden ist, sammelt Informationen zur Nutzung von CPU, Speicher und Ein-Ausgabe und Zeit, die durch das Warten auf Ressourcen verloren gegangen ist. Aus den PSI-Informationen lässt sich leichter als bisher erschließen, wann ein Speichermangel vorliegt. Die zweite Neuerung ist cgroup2, der Nachfolger der Control Groups (cgroup), mit denen Ressourcen an Prozesse oder Gruppen von Prozessen verteilt und beschränkt werden können. cgroup2 ist bereits in neuen Kerneln vorhanden.
Nach Messungen von Facebook ist der OOM-Killer-Daemon in allen getesteten Situationen mindestens gleich gut wie der Kernel-OOM-Killer, in vielen Fällen aber deutlich besser. Er verhindert in allen Fällen sehr wirksam, dass ein zuviel Speicher forderndes Programm ein anderes Programm ausbremst. Er ist bei Facebook im produktiven Einsatz und hat sich bewährt. Facebook hat ihn jetzt als freie Software unter der GPLv2 auf Github veröffentlicht. oomd wird über eine JSON-Datei konfiguriert und kommt lediglich mit einem leeren Plugin. Somit muss man entweder sein Standardverhalten nutzen oder eigene Plugins schreiben. Dokumentation über das Schreiben von Plugins steht allerdings noch aus.