Автоматический перезапуск сервера, если виртуальная память слишком мала

На моем сервере работает довольно много программ: httpd, varnish, mysql, memcache, java..

Каждый из них использует часть виртуальной памяти, а лак был настроен на выделение 3 ГБ памяти для запуска.

Из-за высокой нагрузки на трафик, которая составляет 100 КБ, на нашем сервере не хватает памяти и вызывается oom-killer. Мы должны перезагрузить сервер.

У нас есть 8 ГБ виртуальной памяти, и по какой-то причине мы не можем расширить объем памяти.

У меня вопрос - есть ли какой-нибудь автоматический скрипт, который будет отслеживать, сколько виртуальной памяти осталось и на основе определенных критериев, скажем, если осталось 500 МБ, чем автоматически перезапустить сервер?

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

2 ответа

Если я вас правильно понимаю, вы хотите что-то вроде следующего:

  1. Проверьте, сколько памяти осталось на VPS.
  2. Если осталось 500М памяти, перезагрузите VPS.

Это можно сделать следующим образом

  1. Напишите скрипт, который проверяет, сколько памяти осталось, и перезагрузите VPS.
  2. Добавьте этот скрипт в crontab, чтобы автоматизировать задачу.

например

#!/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 Killer вступает в силу, потому что ваш сервер не хватает памяти. Отключение OOM Killer не поможет с этим - у вас все равно будет нехватка памяти, и ваш сервер в конечном итоге рухнет. Конечно, убийца ООМ не всегда помогает, но отключить его тоже не поможет.

Перезагрузка вашего сервера временно решит проблему, но это произойдет снова.

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

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

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