На моем сервере работает довольно много программного обеспечения: httpd, varnish, mysql, memcache, java ..
Каждый из них использует часть виртуальной памяти, и varnish был настроен на выделение 3 ГБ памяти для запуска.
Из-за высокой нагрузки трафика, составляющей 100 КБ, нашему серверу не хватает памяти, и запускается oom-killer. Мы должны перезагрузить сервер.
У нас 8 ГБ виртуальной памяти, и по какой-то причине мы не можем расширить ее до большего размера.
Мой вопрос: есть ли какой-либо автоматический сценарий, который будет отслеживать, сколько виртуальной памяти осталось, и на основе определенных критериев, скажем, если осталось 500 МБ, чем автоматически перезапустить сервер?
Я знаю, что это неправильное решение, но мы должны это сделать, иначе мы не знаем, когда сервер получит OOM, и к тому времени, когда мы узнаем и перезапустим сервер, мы потеряем наших посетителей.
Если я вас правильно понял, вам нужно что-то вроде следующего:
Это можно сделать следующим образом
например
#!/bin/bash
mem=$(free -m | awk '/Mem:/{print $4}')
(( mem <= 500 )) && reboot
Сделайте скрипт исполняемым
chmod +x scriptname
// обратите внимание, не добавляйте расширение
Добавляем скрипт в cron
crontab -e
* * * * * user_to_run_the_script /path/to/the/script
Надеюсь, вы уловили идею.
У меня была аналогичная проблема, и, хотя я не хочу ставить под сомнение ваш хороший и конкретный вопрос, я должен сказать, что вам нужно долгосрочное решение.
Убийца OOM срабатывает, потому что вашему серверу не хватает памяти. Отключение OOM killer в этом не поможет - вам все равно не хватит памяти, и ваш сервер в конечном итоге выйдет из строя. Конечно, OOM killer не всегда помогает, но и его отключение тоже не поможет.
Перезагрузка сервера временно решит проблему, но это повторится снова.
я имел аналогичная проблема с сервером. Установка контролировать и настройка его для предупреждения о нехватке памяти позволила мне получить доступ к серверу, когда что-то начало происходить, чтобы я мог правильно диагностировать и решить проблему. Я также добавил подкачку через файл подкачки, чтобы увеличить время доступа к серверу во время возникновения проблемы.
В моем случае мой веб-сервер был настроен на запуск слишком большого количества резервных серверов для нагрузки, которую сервер мог выдержать. Как только я выяснил основную причину проблемы, я решил ее, и с тех пор сервер не падал.