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?
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 Zeiger malloc()
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.