Ta odpowiedź wyjaśnia działania podejmowane przez jądro po napotkaniu sytuacji OOM na podstawie wartości sysctl vm.overcommit_memory
.
Gdy overcommit_memory
jest ustawiony na 0 lub 1, overcommit
jest włączony, a programy mogą przydzielać więcej pamięci, niż jest w rzeczywistości dostępne.
Co się stanie, gdy w tej sytuacji zabraknie nam pamięci? W jaki sposób zabójca OOM decyduje, który proces zabić jako pierwszy?
linux
memory
out-of-memory
Ramesh
źródło
źródło
Odpowiedzi:
Jeśli procesy zostaną wyczerpane przez pamięć w stopniu, który może zagrozić stabilności systemu, wówczas pojawia się zabójca OOM.
UWAGA: Zadaniem OOM Killera jest kontynuowanie zabijania procesów, dopóki nie zostanie zwolniona wystarczająca ilość pamięci dla płynnego funkcjonowania reszty procesu, który jądro próbuje uruchomić.
OOM Killer musi wybrać najlepsze procesy do zabicia. Najlepsze tutaj odnosi się do tego procesu, który zwolni maksymalną pamięć po zabiciu i jest również najmniej ważny dla systemu.
Podstawowym celem jest zabicie jak najmniejszej liczby procesów, które minimalizują wyrządzone szkody, a jednocześnie maksymalizują ilość uwolnionej pamięci.
Aby to ułatwić, jądro utrzymuje
oom_score
dla każdego z procesów. Możesz zobaczyćoom_score
każdy z procesów w/proc
systemie plików wpid
katalogu.Im wyższa wartość
oom_score
dowolnego procesu, tym większe prawdopodobieństwo zabicia przez zabójcę OOM w sytuacji braku pamięci.Jak
OOM_Score
oblicza się?Bibliografia
http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-process https://serverfault.com/a/571326
źródło