Як мені знову дати зуби вбивці OOM?


12

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

Як відновити вбивцю OOM до її старих, кровожерних способів?


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.