Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

  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 срабатывает, потому что вашему серверу не хватает памяти. Отключение OOM killer в этом не поможет - вам все равно не хватит памяти, и ваш сервер в конечном итоге выйдет из строя. Конечно, OOM killer не всегда помогает, но и его отключение тоже не поможет.

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

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

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