У меня есть довольно старый Linux-компьютер с 2 ГБ оперативной памяти, без подкачки, и он работает очень хорошо, при этом система с большим эффектом использует каждый неиспользуемый кусок памяти для кеширования.
Однако, когда я близок к тому, чтобы перегрузить память (например, выделено> 1950 МБ), она замедляется до ползания; Я подозреваю, что это потому, что не осталось дисковых буферов. Я знаю, что убийца OOM скоро вступит в силу, но обычно этого не происходит - он становится настолько медленным, что загружает снимки до 30-40, ни один процесс не продвигается (таким образом, не выделяет больше памяти) и Я должен его перезапустить.
Когда я пытаюсь просто убить один процесс, чтобы машина ответила, например перейдя в консоль (через Alt-F1, войдя в систему и просто выполнив "killall badprocess"), это обычно работает, за исключением того, что мне нужно подождать ~ 10 минут между пользователем / паролем и получением приглашения - все, пока есть активность диска.
Опять же, свопа нет, так что это не свопинг - это просто сбой, потому что у него не осталось буферов.
Я бы выделил 100 МБ или около того исключительно для дисковых буферов, что раньше запускало бы убийцу OOM (в конце концов, меньше памяти для программ), но, с другой стороны, оставляло бы машину постоянно реагирующей.
Есть ли способ сделать это? Мне не удалось найти запись / proc / kernel или / sys / vm, которая занимается подобными вещами.
Ожидание, пока oom-killer освободит память, немного похоже на ожидание, когда двигатель вашей машины остановится, чтобы сообщить вам, когда пришло время заправить бензобак. Убийца умов - жестокий инструмент последней надежды и отчаяния для машины с нехваткой ресурсов. Он убивает следующую программу, к которой прикасается, без учета того, как это повлияет на ваше приложение, доступность, надежность и т. Д. Когда вызывается oom-killer, ваш сервер задыхается и находится в критическом состоянии.
Вместо этого вам гораздо лучше принять активный подход к управлению использованием памяти в среде вашего приложения. Вы можете отслеживать / proc / meminfo на наличие проблем и принимать соответствующие меры и снижать нагрузку до того, как серьезная ситуация станет некрасивой.
Посмотри на / proc / sys / vm / min_free_kbytes. Это предел свободных килобайт, который запускает oom-killer. Также было бы хорошо проверить в журналах ключевое слово oom-killer, чтобы узнать, что именно убивается {возможно, вы не хочу убивать sshтебе лучше Ренис Это}