Wenn der Arbeitsspeicher von Prozessen in einem Ausmaß aufgebraucht wird, das möglicherweise die Stabilität des Systems gefährdet, kommt der OOM-Killer ins Spiel.
ANMERKUNG: Es ist die Aufgabe des OOM-Killers, die Prozesse so lange abzubrechen, bis genügend Speicher freigegeben ist, damit der Rest des Prozesses, den der Kernel auszuführen versucht, reibungslos funktioniert.
Der OOM-Killer muss die besten Prozesse zum Töten auswählen . Das Beste bezieht sich hier auf den Prozess, der beim Beenden den maximalen Speicher freigibt und der für das System am wenigsten wichtig ist.
Das Hauptziel besteht darin, die geringste Anzahl von Prozessen zu beenden, die den verursachten Schaden minimieren, und gleichzeitig die Menge des freigewordenen Speichers zu maximieren.
Um dies zu erleichtern, verwaltet der Kernel oom_score
für jeden der Prozesse einen. Sie können die oom_score
einzelnen Prozesse im /proc
Dateisystem unter dem pid
Verzeichnis sehen.
$ cat /proc/10292/oom_score
Je höher der Wert eines oom_score
Prozesses ist, desto höher ist die Wahrscheinlichkeit, dass der OOM-Killer in einer Situation außerhalb des Arbeitsspeichers getötet wird.
Wie OOM_Score
berechnet sich das?
In Davids Patch-Set sind die alten Badness () -Heuristiken fast vollständig verschwunden. Stattdessen wird die Berechnung zu einer einfachen Frage, wie viel Prozent des verfügbaren Speichers vom Prozess verwendet werden. Wenn das System insgesamt nicht genügend Arbeitsspeicher hat, ist "Verfügbarer Arbeitsspeicher" die Summe aller für das System verfügbaren RAM- und Auslagerungsspeicher.
Wenn die OOM-Situation stattdessen durch Erschöpfung des für eine bestimmte CPU-Gruppe / Kontrollgruppe zulässigen Speichers verursacht wird, ist "verfügbarer Speicher" die dieser Kontrollgruppe zugewiesene Gesamtmenge. Eine ähnliche Berechnung wird durchgeführt, wenn die durch eine Speicherrichtlinie auferlegten Grenzwerte überschritten wurden. In jedem Fall wird die Speichernutzung des Prozesses als die Summe seiner residenten Menge (der Anzahl der verwendeten RAM-Seiten) und seiner Auslagerungsnutzung angesehen.
Diese Berechnung ergibt eine Prozent-mal-Zehn-Zahl. Ein Prozess, der jedes Byte des ihm zur Verfügung stehenden Speichers verwendet, hat eine Punktzahl von 1000, während ein Prozess, der überhaupt keinen Speicher verwendet, eine Punktzahl von Null erhält. Es gibt nur sehr wenige heuristische Änderungen an dieser Bewertung, aber der Code subtrahiert immer noch einen kleinen Betrag (30) von der Bewertung von Prozessen, die sich im Stammbesitz befinden, und geht davon aus, dass sie etwas wertvoller sind als Prozesse, die sich im Besitz des Benutzers befinden.
Eine weitere Optimierung besteht darin, den in der Variablen oom_score_adj jedes Prozesses gespeicherten Wert hinzuzufügen, der über / proc angepasst werden kann. Mit diesem Knopf können Sie die Attraktivität jedes Prozesses für den OOM-Killer im Benutzerbereich einstellen. Wenn Sie den Wert auf -1000 setzen, werden OOM-Kills vollständig deaktiviert, während der Wert +1000 dem Zeichnen eines großen Ziels auf dem zugeordneten Prozess entspricht.
Verweise
http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-process
https://serverfault.com/a/571326