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