Иногда я работаю с огромными дампами данных, которые хочу сохранить в памяти для обработки. Иногда я неправильно рассчитываю объем памяти, который будет создавать моя программа, или отладчик умножает использование памяти на коэффициент, который превышает мою доступную память.
Всякий раз, когда я запускаю процесс, требующий памяти, это то, что я ожидаю от нормальной операционной системы: попробуйте съесть всю свободную память, затем попросите некоторые другие несущественные процессы, чтобы они освободили память, которая им не нужна, затем пиши поменяться.
Вот что делает для меня Ubuntu: съесть всю свободную память, затем попросить операционную систему поменять местами все необходимые службы (сеанс gnome, терминал, клавиатуру), затем заморозить и подождать, пока я отключу шнур питания.
Два вопроса:
- Как операционная система может предположить, что что-то может быть настолько важным, что можно перестать слушать вводимые пользователем данные?
- Как я могу сказать Ubuntu никогда не менять местами основные службы и всегда реагировать на ввод пользователя, даже если какой-то глупый процесс пытается съесть больше ресурсов, чем предоставляет система.
swapon
чтобы узнать)? Cheers, Alswappiness
настройку на 10, то есть:vm.swappiness = 10
в /etc/sysctl.conf. Поиск здесь для подкачки для получения дополнительной информации об этом. 2) Если замена не помогает ... Даже если вы не хотите ... увеличить размер файла подкачки до 1.5x16G и посмотрите, поможет ли это. Держи меня в курсе. Cheers, Alvm.swappiness=10
нужно добавить в sysctl.conf. Опытный человек может даже использовать команду sysctl на лету, чтобы установить vm.swappiness = 10, не редактируя файл sysctl.conf. Приветствую, Ал пс: жду ответа ОП.Ответы:
У меня до сих пор нет решения этой проблемы, но я могу предложить два обходных пути, которые могут быть интересны другим:
1) раннее
Это сервис, который следит за использованием памяти и убивает процесс, который потребляет больше всего памяти при достижении определенного порога (см. Также этот и этот вопрос относительно убийцы OOM в ядре Linux)
Я протестировал его с помощью демонстрационного процесса, который неопределенно запрашивает память небольшими порциями. Вот мое первое впечатление: когда я запускаю мошеннический процесс, он быстро израсходует всю мою оперативную память. Затем начинается обмен, система перестает отвечать на запросы. Через несколько секунд система снова подключается. Журнал Earlyoom показывает, что он уничтожил процесс потребления памяти после того, как использование памяти и подкачки достигло 90%.
Раздражающее запаздывание все еще существует, когда начинается подкачка и после того, как процесс был остановлен, некоторые части других процессов обычно остаются в подкачке, пока их не запросят, но это начало.
2) просто отключить своп
Я знаю, что это спорная тема , но для настольных систем и особенно машин для разработки, где время от времени может случиться, что процесс попытается поглотить всю вашу память, имеет смысл: без свопа убийца OOM просто работает как предполагалось. Когда у вас заканчивается память, он находит лучший способ убить и избавляется от него. Нет задержки, нет задержки.
Вы можете отключить обмен для текущего сеанса
sudo swapoff -a
или сделать изменение постоянным .Конечно, правильное решение этой проблемы заключается в том, что система остается отзывчивой, когда основная память исчерпана, и она начинает менять память, как будто завтра не наступит, но, похоже, это произойдет не скоро.
источник
Попробуйте одну из двух вещей:
1) измените настройку swappiness со значения по умолчанию, равного 60, на 10, то есть: добавьте vm.swappiness = 10 в /etc/sysctl.conf (в терминале, введите
sudo gedit /etc/sysctl.conf
), затем перезагрузите систему. Поиск здесь для подкачки для получения дополнительной информации об этом.2) Если подкачка не помогает ... даже если вы не хотите ... увеличить размер файла подкачки до 1.5x16G и посмотрите, поможет ли это.
Держи меня в курсе. Ура, Ал
источник
top
чтобы убить захват памяти). Примерно через минуту процесс убивается. Не идеально, но мы все ближе.Я решил похожую проблему. Я не знаю, подходит ли вам мой опыт ...
Недавно я опубликовал руководство по установке linux на петлевые устройства LVM, загружающиеся с USB (поэтому без необходимости устанавливать grub на внутренний диск, оставляя его оригинальным). Вот руководство: https://github.com/DareDevil73/linux-on-loopback-usb .
Затем я столкнулся с проблемой замораживания при высокой загрузке памяти и наблюдал ненормальное использование пространства подкачки (все израсходованное ОЗУ и использование подкачки близко к нулю). Очевидно, что раздел подкачки LVM был смонтирован и работает должным образом, но я не знаю, почему ядро не использовало его должным образом.
Я попробовал альтернативное решение. Я создал файл обратной петли подкачки (не LVM) и заморозка исчезла. Теперь файл подкачки используется так, как он есть, и ОС никогда не зависает!
Пожалуйста, посмотрите https://github.com/DareDevil73/linux-on-loopback-usb#known-issues, чтобы получить более подробную информацию.
источник