Как мне снова дать зубы-убийцы ООМ?

12

Раньше я проклинал OOM-killer за чрезмерную агрессивность и убийство приложений, которые я использовал. Теперь, когда я периодически наблюдаю за работой системы в течение 15 минут из-за какой-то программы с плохим поведением, а затем, наконец, прибегаю к принудительному отключению питания, потому что она не реагирует на клавиатуру, я понимаю, что у меня это получилось лучше, чем я предполагал тогда

Как мне вернуть ООМ-убийцу к старым, кровожадным способам?

AVDI
источник
1
Взгляните на программы, вызывающие проблему, и ограничьте объем памяти, с которой они могут сосатьlimits.conf
LawrenceC

Ответы:

4

Я бы уменьшил количество пространства подкачки, которое у вас есть. Типичные установки в наши дни пытаются выделить столько свопа, сколько имеется физической памяти (а иногда и вдвое больше). Проблема в том, что когда что-то идет не так, система впадает в смертельную спираль попыток «перетасовать» вещи из памяти на диск и обратно, и она начинает делать так много, что у нее нет времени на ответ для ввода пользователя.

В старые добрые времена все процессы были выгружены на диск (и обратно), поэтому требовались большие перестановки.

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

Брайан Стивенс
источник
У меня нулевой своп, и моя система блокируется на 20 с лишним минут, когда у меня бесконечный цикл javascript в хроме, а затем вставляется в массив или что-то еще. Мне нужно запустить OOMK до того, как моя система станет бесполезной, а не наоборот.
JasonWoof
0

Вот что сработало для меня:

echo 1 > /proc/sys/vm/oom_kill_allocating_task

Это только для этой загрузки. Вы можете проверить, запустив следующее на вкладке консоли инспектора вашего браузера:

a = []; while (true) { a.push(1); }

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

echo "vm.oom_kill_allocating_task=1" >> /etc/sysctl.conf
JasonWoof
источник