Этот ответ объясняет действия, предпринимаемые ядром при возникновении ситуации OOM, в зависимости от значения sysctl vm.overcommit_memory
.
Когда overcommit_memory
установлено значение 0 или 1, overcommit
оно включено, и программам разрешается выделять больше памяти, чем реально доступно.
Что происходит, когда у нас заканчивается память в этой ситуации? Как убийца OOM решает, какой процесс убить первым?
linux
memory
out-of-memory
Рамеш
источник
источник
Ответы:
Если память полностью израсходована процессами, в той степени, которая может угрожать стабильности системы, тогда появляется убийца OOM.
ПРИМЕЧАНИЕ. Задачей OOM Killer является продолжение процессов уничтожения до тех пор, пока не освободится достаточно памяти для бесперебойного функционирования остальной части процесса, который пытается запустить ядро.
OOM Killer должен выбрать лучший процесс (ы) для уничтожения. Под «лучшим» здесь понимается тот процесс, который высвободит максимум памяти при убийстве, а также наименее важный для системы.
Основная цель состоит в том, чтобы убить наименьшее количество процессов, которое минимизирует наносимый ущерб и в то же время максимизирует объем освобождаемой памяти.
Чтобы облегчить это, ядро поддерживает
oom_score
для каждого из процессов. Вы можете увидетьoom_score
каждый из процессов в/proc
файловой системе вpid
каталоге.Чем выше значение
oom_score
любого процесса, тем выше вероятность того, что OOM Killer будет убит в ситуации нехватки памяти.Как
OOM_Score
рассчитывается?Рекомендации
http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-process https://serverfault.com/a/571326
источник