Wyjaśniono tutaj, że OOM-Killer można skonfigurować za pomocą overcommit_memory
i że:
- 2 = bez nadmiernego zaangażowania. Przydziały kończą się niepowodzeniem, jeśli prosi się o zbyt wiele.
- 0, 1 = nadmierne zaangażowanie (heurystycznie lub zawsze). Zabij niektóre procesy oparte na heurystyce, gdy faktycznie uzyskuje się zbyt dużo pamięci.
Teraz mogę całkowicie to zrozumieć, ale dlaczego nie ma opcji (lub dlaczego nie jest to ustawienie domyślne) zabicia samego procesu, który faktycznie próbuje uzyskać dostęp do zbyt dużej ilości przydzielonej pamięci?
no overcommit
opcja. Jeśli proces wymaga zbyt dużej ilości pamięci, kończy się niepowodzeniem. Jeśli sprawdzi błąd, zwykle sam się zabije; jeśli nie, prawdopodobnie pojawi się błąd segmentacji, gdy spróbuje wyłuskać zwracany wskaźnik zerowy malloc()
, i zawiesi się.
no overcommit
tryb, zgodnie z cytowanymi źródłami (takimi jak kernel.org/doc/Documentation/vm/overcommit-accounting ). Myślę, że odpowiednio zmodyfikuję twoje pytanie.