Можно ли заставить систему превентивно поменять местами неактивные страницы ( vm.swappiness
), но вызвать oom-killer, когда в системе заканчивается ОЗУ (в отличие от нехватки памяти) и она вынуждена менять местами?
Конечная цель состоит в том, чтобы не дать системе остановиться, когда она начинает перегружать диск из-за серьезных сбоев страниц, но все же позволяет неактивным страницам заменяться.
Другим желанием было бы настроить объем подкачки памяти, которую система будет вынуждена использовать до запуска oom-killer. Таким образом, система может чуть-чуть погрузиться в обмен, если он не заходит слишком далеко. Или я мог бы установить такой порог, чтобы запускать oom-killer перед использованием всей оперативной памяти, чтобы всегда было место для кэша файловой системы (и, таким образом, чтобы избежать дополнительной перегрузки диска).
Не похоже, что это будет так сложно сделать. Кажется, что вы можете просто сказать, что oom-killer запускается, когда в системе используется X-ram / free. Но вот почему я спрашиваю; Я не знаю.
Для уточнения не хочу выключать своп или настраивать vm.swappiness
параметр
источник
Ответы:
Я также боролся с этой проблемой. Я просто хочу, чтобы моя система оставалась отзывчивой, несмотря ни на что, и я предпочитаю потерять процессы, а ждать несколько минут. Кажется, нет никакого способа добиться этого, используя ядро Oom Killer.
Однако в пространстве пользователя мы можем делать все, что захотим. Поэтому я написал ранний демон OOM ( https://github.com/rfjakob/earlyoom ), который уничтожит самый большой процесс (по RSS), когда доступная оперативная память опустится ниже 10%.
Без раннего увеличения было легко заблокировать мою машину (8 ГБ ОЗУ), запустив http://www.unrealengine.com/html5/ несколько раз. Теперь вкладки виновных в браузере убиваются до того, как все выходит из-под контроля.
источник
column -t -s,
с некоторыми огромными CSV-файлами и позволитьearlyoom
убить его, когда это невозможно, прежде чем замечать какую-либо неотзывчивость.Это звучит как слишком сложное решение. Я хотел бы предложить (и я делаю это на машинах, которые я настраиваю, которые не нуждаются в спящем режиме), просто выделяя небольшое количество пространства подкачки (128-256MiB). Таким образом, ядро может поменять некоторые страницы, но OOM-killer вызывается до того, как дела пойдут плохо.
Если вы действительно хотите это сделать, я думаю, вам нужно написать свой собственный скрипт / программу, которая отслеживает использование подкачки и вызывает OOM-killer с помощью ключа Magic SysReq (что можно сделать программно, написав в
/proc/sysrq-trigger
).источник
vm.swappiness
и принудительный своп из-за нехватки памяти. Все, что должно произойти, это когда ядро вынуждено поменяться местами, чтобы запустить oom-killer. И 10 ГБ также оставляют тонны пространства для принудительного обмена, чтобы побить диск.