Чи можливо спровокувати вбивцю OOM при примусовій заміні?


26

Чи можливо система попередньо заміняти неактивні сторінки (vm.swappiness ), але викликати oom-killer, коли в системі закінчується оперативна пам’ять (на відміну від пам’яті) і змушена обмінюватися?

Кінцева мета - утримати систему від затирання, коли вона починає обмітати диск через основні помилки сторінки, але все ж нехай неактивні сторінки витісняються.

Ще одним бажанням було б налаштувати, скільки обмінної пам’яті система змушена використовувати перед спрацьовуванням вбивць. Таким чином система може трохи зануритися в своп, доки вона не зайде занадто далеко. Або я міг би встановити такий поріг для запуску oom-killer перед тим, як використовувати всю оперативну пам’ять, тому завжди буде місце для кешу файлової системи (і, таким чином, уникнути більшої кількості розбиття диска).

Здається, це не так важко зробити. Здається, ви могли б просто сказати убивцеві, що спрацьовує, коли в системі використовується X / ram. Але ось чому я прошу; Не знаю.

Для уточнення я не хочу вимкнути своп або коригувати vm.swappinessпараметр


3
Цікаво, що це відбувається навіть тоді, коли немає файлу своп. Мабуть, файли, що відображаються лише в пам'яті (наприклад, виконавчі файли, бібліотеки, можливо графічні ресурси), замінюються замість них.
WGH

Facebook oomd - демон в просторі користувачів, призначений для вбивства процесів, що базуються на загальній пропускній здатності системи (тобто лише при обмолоті). Але здається досить складним налаштування для настільних / робочих станцій (які, ймовірно, не ставлять завдання в групи або контейнери).
Джефрі Босбум

Відповіді:


22

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

Однак у користувальницькому просторі ми можемо робити все, що завгодно. Отже, я написав Демон ОМН ( https://github.com/rfjakob/earlyoom ), який знищить найбільший процес (за RSS), коли наявна оперативна пам'ять опуститься нижче 10%.

Без раннього зусилля, було легко зафіксувати мою машину (8 ГБ оперативної пам’яті), запустивши http://www.unrealengine.com/html5/ кілька разів. Тепер винні вкладки браузера вбиваються, перш ніж речі вийдуть з-під руки.


1
Дякую, саме це я шукав. Тепер я можу продовжувати працювати column -t -s,над величезними файлами csv і дозволяти earlyoomвбивати його, коли це неможливо, перш ніж помітити будь-яку невідповідальність.
henfiber

4

Це звучить як занадто продумане рішення. Я б запропонував (і я це роблю на машинах, у яких я налаштовую, які не потребують сплячого режиму), просто виділивши невелику кількість місця для обміну (128-256 Мбіт). Таким чином ядро ​​може поміняти місцями кілька сторінок, але вбивця OOM викликається, перш ніж все стане поганим.

Якщо ви дійсно хочете це зробити, я думаю, вам потрібно буде написати свій власний сценарій / програму, яка відстежує використання свопів і викликає OOM-убивцю за допомогою клавіші Magic SysReq (що можна зробити програмно, записавши в /proc/sysrq-trigger).


1
Я б стверджував, що мати невеликий своп - це не дуже елегантне рішення. Ви в основному обмежуєте корисність свого свопу. Що робити, якщо у вас багато неактивних сторінок і виграєте від обміну 10 ГБ? У мене є коробки з ~ 100gb оперативної пам’яті, де 10gb swap не є надуманою ідеєю. І написання програми для цього в просторі користувачів просто відкрите для проблем (порівняно з первісно в ядрі).
Патрік

Тому що тоді вам по суті потрібен механізм, щоб відрізнити "хороший замін" від "поганий замін", і це складно створити алгоритм. Обсяг відповідного обміну, очевидно, залежить від обсягу оперативної пам’яті та завантаженості роботи, тому якщо 10GiB підходить для ваших машин, тоді
виділіть

Чому це буде важко? Існує лише два типи свопів, попереджувальний своп через vm.swappinessта примусовий замін через те, що закінчився таран. Все, що повинно відбутися, це коли ядро ​​змушене поміняти місцями, щоб викликати oom-убивцю. А 10gb також залишає тонни місця для примусової заміни, щоб обмітати диск.
Патрік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.