Was ist die Meldung "Out of Memory": Kind opfern?


20

Meinem Computer ging kürzlich der Speicherplatz aus (eine nicht unerwartete Folge des Kompilierens von Software bei der Arbeit mit großen GIS-Datensätzen). Im Systemprotokoll wird in der folgenden Zeile beschrieben, wie es mit der OOM-Bedingung umgegangen ist:

Out of memory: Kill process 7429 (java) score 259 or sacrifice child

Worum geht es hier or sacrifice child? Sicherlich ist es kein dunkles Ritual, die Dinge am Laufen zu halten?

Antworten:


8

Aus den Quelldateien, die ich in oom_kill.c gefunden habe , prüft der OOM Killer, nachdem eine solche Nachricht in das Systemprotokoll geschrieben wurde, die identifizierten untergeordneten Elemente des Prozesses und wertet sie nach Möglichkeit aus, um eines anstelle des Prozesses selbst zu beenden.

Hier ein Kommentar aus der Quelldatei, der dies erklärt:

/*
 * If any of p's children has a different mm and is eligible for kill,
 * the one with the highest oom_badness() score is sacrificed for its
 * parent.  This attempts to lose the minimal amount of work done while
 * still freeing memory.
 */

Dies gilt auch für Firefox (Web Content).
neverMind9

2

Es geht darum, einen untergeordneten Prozess des Prozesses zu töten , dem ein KILLSignal gesendet werden soll.


2
Aber was heißt das ? Gibt es eine Methode, mit der die Eltern ein Kind "opfern" können, um sich selbst zu retten?
Thanatos

Meine Vermutung, die nur eine Vermutung ist, ist, dass, da alle Prozesse Nachkommen des Linux-Init-Prozesses sind, der übergeordnete Prozess in diesem Kontext ein Linux-Prozess ist, bei dem die untergeordneten die verschiedenen Anwendungen sind. In diesem Fall rettet sich der Linux-Prozess, indem er eines seiner Kinder tötet.
Seamus

0

Dies ist der Mörder von Oom (Out of Memory). Wenn auf Ihrem System nicht mehr genügend Arbeitsspeicher vorhanden ist, bricht der Linux-Kernel die Prozesse ab, um Arbeitsspeicher freizugeben. Eine Heuristik bestimmt, welcher Prozess der beste Kandidat ist, um Speicher freizugeben, ohne das System zu beschädigen (normalerweise sind Root-Prozesse nicht die besten Kandidaten).

Weitere Details hier: Wie entscheidet der OOM-Killer, welcher Prozess zuerst beendet wird?


4
Dies erklärt jedoch nicht den "or sacrifice child" -Teil der Nachricht.
Markieren Sie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.