Проведя небольшое исследование, я обнаружил, что можно настроить или даже сделать определенные процессы невосприимчивыми к OOM killer, добавив значение в /proc/pid/oom_adj. Конечно, мне нужно найти pid для моего процесса с помощью pidof или pgrep или чего-то подобного и создать скрипт, который я запущу, как только все мои процессы будут запущены и запущены.
Проблема с убийцей OOM такая же, как и с любым другим убийцей. Они могут выглядеть разумными и рациональными на поверхности, но в глубине души они на самом деле серьезно неуравновешены, совершенно безумны и часто неспособны принять правильное решение.
Теперь я лично не против небольшого убийства, пока я знаю, что происходит, и имею определенный контроль над жертвами (успокойтесь, ребята, я говорю о компьютерных вещах), поэтому я ищу лучший способ защитить определенные процессы от ужасного убийцы OOM, чтобы мне не приходилось запускать скрипт каждый раз, когда все мои программы запущены или когда я запускаю новую программу. Есть идеи, как легко этого добиться?
решение1
Вам не следует полагаться на OOM killer для управления вашими процессами. OOM killer — это крайняя мера, когда единственной альтернативой является сбой системы. Например, вся память кэша и дисковых буферов была очищена и зафиксирована, все, что можно было выгрузить/отбросить, обработано, а памяти все еще недостаточно... Очевидно, вы не хотите, чтобы ваша работающая система когда-либо достигла этого состояния.
Из-за строгих ограничений, в рамках которых работает OOM killer (не может выделять больше памяти, не может подкачивать другие процессы и т. д.), онволязавершайте процессы, которые вы не хотите завершать, чтобы снизить нагрузку на память.
Я думаю, если в вашей системе просто недостаточно памяти, вам нужно добавить больше памяти или пространства подкачки, в зависимости от того, заканчивается ли у вас физическая память или общая виртуальная память.
С другой стороны, если у вас есть несколько неконтролируемых процессов, которые время от времени потребляют слишком много памяти из-за утечки памяти или какой-либо другой ошибки, вы можете контролировать это другими способами:
Установите
ulimit -m
перед запуском проблемного процесса и ограничьте объем памяти, который может выделить этот процесс.Если произошла утечка памяти и она достаточно предсказуема, перезапустите проблемный процесс по расписанию через cron.
В любом случае, OOM killer вам не друг, это непредсказуемый человек :-/