Hier wird erklärt , dass der OOM-Killer über konfiguriert werden kann overcommit_memory
und dass:
- 2 = kein Overcommit. Zuweisungen schlagen fehl, wenn zu viel verlangt wird.
- 0, 1 = Overcommit (heuristisch oder immer). Beenden Sie einige Prozesse basierend auf bestimmten Heuristiken, wenn tatsächlich auf zu viel Speicher zugegriffen wird.
Nun, ich kann das völlig falsch verstehen, aber warum gibt es keine Option (oder warum ist es nicht die Standardeinstellung), um genau den Prozess abzubrechen, der tatsächlich versucht, auf zu viel zugewiesenen Speicher zuzugreifen?
linux
out-of-memory
Martin Ba
quelle
quelle
no overcommit
Option im Wesentlichen tut. Wenn ein Prozess zu viel Speicher benötigt, schlägt dies fehl. Wenn es nach dem Fehler sucht, wird es sich normalerweise selbst töten. Wenn dies nicht der Fall ist, wird wahrscheinlich ein Segmentierungsfehler ausgegeben, wenn versucht wird, den zurückgegebenen Nullzeiger zu dereferenzieren, und der Zeigermalloc()
stürzt ab.no overcommit
den genannten Quellen zufolge tatsächlich der Modus ist (z. B. kernel.org/doc/Documentation/vm/overcommit-accounting ). Ich denke, ich werde Ihre Frage entsprechend bearbeiten.Antworten:
Betrachten Sie dieses Szenario:
Wenn der Prozess, der beendet wurde, der letzte Prozess ist, der Speicher anfordert, wird Ihr Task-Manager beendet.
Oder:
Jetzt wird dein X-Server getötet. Es hat das Problem nicht verursacht; es war nur "am falschen Ort zur falschen Zeit". Es war zufällig der erste Prozess, der mehr Speicher zugeteilt hat, als noch keiner übrig war, aber es war nicht der Prozess, der am Anfang den gesamten Speicher verbraucht hat.
quelle