6

Проведя небольшое исследование, я обнаружил, что можно настроить или даже сделать определенные процессы невосприимчивыми к убийце OOM, указав значение в /proc /pid /oom_adj. Мне, конечно, нужно найти pid для своего процесса, используя pidof или pgrep или что-то в этом роде и создайте скрипт, который я запускаю, когда все мои процессы запущены.

Проблема с убийцей OOM такая же, как и с любым другим убийцей. На первый взгляд это может показаться разумным и рациональным, но в глубине души они на самом деле серьезно обеспокоены, совершенно безумны и зачастую неспособны принять правильное решение.

Теперь я лично не возражаю против небольшого убийства, пока я знаю, что происходит, и имею определенный контроль над жертвами (успокоить людей, я говорю о компьютерных вещах), поэтому я ищу лучший способ защиты некоторые процессы против ужасного убийцы OOM, так что мне не нужно запускать скрипт каждый раз, когда все мои проги работают или когда я запускаю новую программу. Есть идеи как легко этого добиться?

1 ответ1

6

Вы не должны полагаться на OOM killer для управления своими процессами. OOM killer - это мера последней инстанции, когда единственной альтернативой является сбой системы. Например, вся кеш-память и дисковые буферы были очищены и зафиксированы, все, что может быть выгружено / удалено, обрабатывается, и у вас все еще не хватает памяти ... Очевидно, вы не хотите, чтобы ваша работающая система когда-либо достигала этого состояния.

Из - за строгие ограничения , что ОАЯ убийца работает под (не может выделить больше памяти, не может поменять в других процессах и т.д.), он будет убивать процессы , которые вы не хотите , чтобы убить , чтобы ослабить нагрузку на память.

Я думаю, что если вашей системе просто не хватает памяти, вам нужно добавить больше памяти или места подкачки, в зависимости от того, заканчивается ли у вас физическая память или общая виртуальная память.

Если, с другой стороны, у вас есть несколько запущенных процессов, которые время от времени потребляют слишком много памяти из-за утечки памяти или какой-либо другой ошибки, вы можете управлять этим другими способами:

  1. Установите ulimit -m перед запуском вызывающего процесса и ограничьте, сколько памяти может выделить этот процесс.

  2. Перезапустите нарушающий процесс по расписанию с помощью cron, если есть утечка памяти, и она достаточно предсказуема.

В любом случае, убийца ООМ не твой друг, это слабая пушка:-/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .