Предотвращение зависания Ubuntu, даже если системная память низкая

9

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

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

Вот что делает Ubuntu для меня: есть всю свободную память, а затем попросите операционную систему обменять все основные сервисы (сеанс gnome, терминал, клавиатуру), затем заморозить и дождаться, когда я вытащу вилку питания.

Два вопроса:

  1. Как может операционная система предположить, что все может быть настолько важным, что можно прекратить слушать пользовательский ввод?
  2. Как я могу сказать Ubuntu о том, чтобы никогда не менять основные сервисы и всегда реагировать на ввод пользователя, даже если какой-то глупый процесс пытается съесть больше ресурсов, чем предоставляет система.
задан Klamann 01.09.2016 в 12:07
источник

3 ответа

1

У меня все еще нет решения проблемы, но я могу предложить два обходных пути, которые могут представлять интерес для других:

1) earlyoom

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

Я протестировал его с демо-процессом, который бесконечно запрашивает память в небольших кусках. Вот мое первое впечатление: когда я запускаю процесс изгоев, он быстро поглощает всю мою оперативную память. Затем начинается обмен, система становится невосприимчивой. Через несколько секунд система снова подключилась к сети. Журнал Earlyoom показывает, что он убил процесс хранения памяти после того, как память и использование swap достигли 90%.

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

2) просто отключите swap

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

Вы можете отключить своп для текущего сеанса с sudo swapoff -a или сделать изменение постоянным .

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

ответ дан Klamann 29.09.2017 в 19:59
0

Ubuntu 16.04 поставляется с версией ядра 4.4. В версии ядра 4.6 убийца OOM (Out of Memory Task Killer) провел капитальный ремонт для рассмотрения жалоб, подобных вашим. Ядро версии 4.6 находится в конце жизни, и текущее ядро ​​Ubuntu версии 4.7.2 находится на веб-сайте. Он исправляет многие другие проблемы, помимо обновления модуля oom_reaper.

Я сделал тест на прошлой неделе, заполнив RAM + SWAP, и вход остался стабильным. Мне также разрешили переключаться между активными окнами только с задержкой в ​​мини-селе. Я не мог вызывать новый процесс, например, «alt» + «print screen», но мог бы вызвать упорядоченное завершение работы.

    
ответ дан WinEunuuchs2Unix 01.09.2016 в 14:55
0

Попробуйте одну из двух вещей:

1) измените параметр swappiness с его значения по умолчанию от 60 до 10, т.е.: добавьте vm.swappiness = 10 в /etc/sysctl.conf (в терминал, введите sudo gedit /etc/sysctl.conf ), затем перезагрузите систему. Найдите здесь информацию о swappiness для получения дополнительной информации об этом.

2) Если swappiness не помогает ... хотя вы можете не захотеть ... увеличить размер вашего файла подкачки до 1.5x16G и посмотреть, поможет ли это.

Держи меня в курсе. Cheers, Al

    
ответ дан heynnema 05.09.2016 в 22:27