Можете ли вы установить минимальный размер буфера для Linux?


8

У меня довольно старая машина Linux с 2 ГБ оперативной памяти, без подкачки, и она работает очень хорошо, система использует каждый неиспользуемый фрагмент памяти для кеширования с большим эффектом.

Однако, когда я близок к нагрузке на память (например, выделено> 1950 МБ), она замедляется до ползания; Я подозреваю, что это потому, что не осталось дисковых буферов. Я знаю, что OOM Killer скоро вступит в силу, но обычно этого не происходит - он становится настолько медленным, что загружает до 30-40, ни один процесс не делает никакого прогресса (таким образом, не выделяет больше памяти), и Я должен перезапустить его.

Когда я пытаюсь просто убить один процесс, чтобы заставить машину реагировать, например, перейдя в консоль (через Alt-F1, войдя в систему и просто выполнив killall badprocess), он обычно работает, за исключением того, что мне приходится ждать ~ 10 минут между пользователем и паролем и получением приглашения - все, пока есть активность на диске.

Опять же, нет никакого обмена, так что это не обмен - он просто работает, потому что у него не осталось буферов.

У меня было бы около 100 МБ или около того, выделенных исключительно для дисковых буферов, которые раньше вызывали бы OOM killer (в конце концов, меньше памяти для программ), но, с другой стороны, машина всегда была бы отзывчивой.

Есть способ сделать это? Мне не удалось найти запись в / proc / kernel или / sys / vm, которая делает подобные вещи.


У меня тоже есть такая же проблема, и, к сожалению, ни один из ответов на эту дату не поможет в этом вопросе.
Кришьянис Несенбергс

Ответы:


1

Посмотрите на / proc / sys / vm / min_free_kbytes . Это предел свободного килобайта, который запускает убийцу бомб. Также было бы неплохо проверить в логах ключевое слово oom-killer, чтобы узнать, что именно убивается {вероятно, вы не хотите убивать ssh , вам лучше взять его в аренду }


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

Здесь тоже ничего не поделаешь, система по-прежнему полностью не отвечает.
Tronic

Это действительно помогло мне, у меня также есть 2 ГБ оперативной памяти, и я установил это значение почти на 500 МБ - пока нет замедлений / зависаний
Krišjānis Nesenbergs

В настоящее время я тестирую этот параметр на моей рабочей станции. У меня 8 ГБ ОЗУ, и большую часть времени я не использую больше 5 ... за исключением случаев, когда по какой-то причине мне нужно запустить виртуальную машину Windows, которая требует около 4 ГБ ОЗУ. Я установил ZRAM на моей операционной системе, потому что мой жесткий диск механический, но он все еще становится довольно медленным с почти полной оперативной памятью именно из-за нехватки ОЗУ для буферов и кешей файловой системы Я просто использовал vm.min_free_kbytes, чтобы убедиться, что у меня всегда есть по крайней мере 2 ГБ свободного места, а остальная часть перенесена в сжатую оперативную память (что намного быстрее, чем обычное пространство подкачки). Выложу позже с результатами.
РАКК

1

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

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


Ситуация, которую я обнаружил, - это как раз то время, когда мой сервер задыхается и находится в критическом состоянии. От полностью отзывчивого компьютера требуется менее 20 секунд до 1 минуты, чтобы ответить на Ctrl-Alt-F1 (переключение с X на консоль). И вход невозможен, потому что через 1 минуту он отключается даже без запроса пароля. Это машина, на которой запущено много процессов; каждый из них самостоятельно НЕ является проблемой. Кроме того, это просто проблема с памятью - с процессором все в порядке, а с диском все в порядке, если осталось около 50 МБ дисковых буферов.

Что делать, если вы используете Ulimit и приложение использует порог для выполнения действия?
Николайдис Фотис

Проблема в сумме всех заявок; 20 или около того, каждый с выделенным 20-100 МБ. Он прекрасно работает в течение нескольких недель, даже месяцев, но когда все хотят выделить ~ 100 МБ одновременно, все падает и горит; Я бы предпочел, чтобы oom_killer убил одного из них, чем самому, чтобы перезагрузить машину. Во всяком случае, я включил своп на данный момент - большинство приложений не используют всю свою память все время, поэтому машина остается стабильной даже при нагрузке до конца физической памяти; однако, я бы предпочел, чтобы у меня не было свопа для этой машины, если бы я мог.

1
Не решает реальную проблему, которая заключается в том, что не нужно устанавливать надлежащие пределы использования памяти (ограничения не очень полезны), приложения легко теряют память при распределении памяти, убийца OOM не запускается достаточно рано, а также массивная перегрузка диска и отсутствие отклика вызвано всем этим. Я просто потратил 30 минут времени своего работодателя, потому что машина компиляции стирала диск в течение получаса при компиляции моего кода, вместо того, чтобы просто убивать процессы Chromium, необходимые для уничтожения (или самой компиляции) менее чем за секунду, а затем покончим с этим.
Троник

Если вы настроите oom_adjправильно, вы можете заставить свою настольную систему работать немного как Android, где система практически всегда работает против OOM killer (технически есть «убийца низкой памяти», и она настраивается через /sys/module/lowmemorykiller). Логика заключается в том, чтобы постоянно отмечать некритические фоновые процессы как потенциальные жертвы убийцы OOM и искать уничтоженные процессы и медленно перезапускать требуемые уничтоженные программы, чтобы избежать перегрузки системы. Просто убедитесь, что процесс, который продолжает перезапускать другие процессы, выделен за пределы OOM killer.
Микко Ранталайнен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.