Linux OOM дисковый ввод / вывод. Также: swap, для чего он хорош?

У меня проблемы с OOM killer на одной из моих установок Linux (2.6.37). Компьютер имеет 4 ГБ памяти, которую я иногда полностью использую. В этих случаях я ожидаю, что обработчик OOM войдет и выполнит свою работу, убив процесс или два. Вместо этого или, возможно, при попытке сделать это, система блокируется, выполняя дисковый ввод-вывод, как будто завтра не наступит. Вот в чем дело: у меня нет включенного обмена. По какой-то причине моя система без подкачки по-прежнему блокируется огромным количеством дисковых операций ввода-вывода, несмотря на то, что подходящим способом является просто убить процесс или два. Мысли?

Вся эта проблема заставляет меня задуматься, требует ли Linux какой-либо подкачки, чего я не знаю. Объяснение того, так ли это и почему, будет с благодарностью. Я знаком с идеями подкачки на концептуальном уровне (т. Е. Виртуальная память, разбиение по страницам, перегрузка), но мне интересно, есть ли какие-либо детали реализации, которые я, возможно, пропустил.

2 ответа

Решение

На самом деле вопрос в том, почему вы работаете без обмена? Особенно, если вы видите (серьезные) проблемы с производительностью, связанные с нехваткой оперативной памяти? Вы знаете, что отсутствие свопа может на самом деле замедлить работу вашей системы, верно?

Очевидное решение состоит в том, чтобы добавить некоторое пространство подкачки, и ваша система не будет вам мешать. Учитывая дешевое дисковое пространство, я не могу вспомнить какие-либо распространенные ситуации1, когда вы должны когда-либо создавать систему без подкачки.

Что касается ответа на ваш вопрос, я не помню всех низкоуровневых деталей о том, почему подкачка важна даже в системах, где вы не собираетесь исчерпывать память, но в списке рассылки ядра Linux были споры о том, Разумно запускать системы без подкачки (и не было много убедительных ответов). Общий консенсус обычно заключается в том, чтобы всегда иметь своп и корректировать своп по мере необходимости.

Кроме того, я думаю, что вы неправильно понимаете некоторые важные замечания, касающиеся убийцы ООМ Linux. Прежде всего, полагаться на это для решения проблем с нехваткой памяти - очень плохая идея (тм). Это может быть очень неразборчиво в том, что он убивает, и вполне возможно, что вы останетесь с нестабильной или даже непригодной системой. Да, он пытается убить недавние процессы, которые потребляют много памяти (незначительная гарантия, чтобы попытаться поймать запущенный процесс), но нет никаких гарантий. Я видел, как он убивал ssh, убивал процессы Xen (на сервере виртуальных хостов Xen, вызывая сбой виртуальных машин), и в одном случае он убивал NFS.

Что касается IO.,, Я не знаю наверняка, что будет причиной этого. Возможно, процесс, связанный с файловой системой или диском, был убит? Возможно, в процесс встроена какая-то функция "кэширования на диск", когда он не может выделить достаточно памяти?

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

[1] Встраиваемые системы - единственное очевидное исключение, и они не особенно распространены (и если вы имеете дело со встроенными системами, вы уже будете знать о требованиях).

Я думаю, что AndreasM ударил его по голове (причина того, что диск стал слишком быстрым). Исполняемые файлы распределяются по требованию - так что при нормальной работе у вас будут почти все ваши исполняемые файлы и библиотеки, расположенные в хорошей физической памяти. Но когда ОЗУ становится мало, но недостаточно для запуска убийцы нехватки памяти, эти страницы удаляются из ОЗУ. Таким образом, вы попадаете в ситуацию, когда страницы выселяются - поначалу проблем нет, потому что они выселяются с наименьшего количества использований в первую очередь, и это выводит страницы, которые вы все равно не используете. Но затем он выбивает те, которые вы используете, просто чтобы сразу же вернуться к ним на странице. Город Трэш.

По сути, если бы что-то использовало чуть больше оперативной памяти, вы, вероятно, получили бы удар OOM Killer, но вас там еще не было. Как уже говорили некоторые, OOM killer является неразборчивым, это действительно скорее последнее средство избежать паники ядра, чем то, что вы должны рассмотреть для использования в нормальной работе. Если у вас есть какие-то пользовательские настройки, я бы подумал о том, чтобы написать демона для мониторинга свободной памяти и убить, используя политику по вашему выбору, когда она приближается к полной.

Другие вопросы по тегам