Если вы какое-то время были администратором, вы наверняка сталкивались с ситуациями, когда сервер резко загружает процессор или память и / или уровни нагрузки. Запуск `top` тоже не всегда даст вам ответ. Так как же найти эти хитрые процессы, которые потребляют ресурсы вашей системы, чтобы убить их?
Следующий сценарий может помочь. Он был написан для веб-сервера, поэтому в нем есть некоторые его части, которые специально ищут процессы httpd, а некоторые части имеют дело с MySQL. В зависимости от развертывания вашего сервера просто закомментируйте / удалите эти разделы и добавьте другие. Его следует использовать в качестве отправной точки.
Предварительными условиями для этой версии сценария являются некоторые бесплатные программы, выпущенные под Стандартной общественной лицензией GNU под названием mytop (доступно по адресу
хттп://жереми.заводны.ком/мускл/мотоп/
), который является фантастическим инструментом для проверки работы MySQL. Он стареет, но по-прежнему отлично подходит для наших целей.
Кроме того, я использую mutt в качестве почтовой программы - вы можете изменить сценарий, чтобы просто использовать встроенную в linux утилиту `mail`. Запускаю через cron каждый час; отрегулируйте, как считаете нужным. Да, и этот сценарий должен запускаться от имени пользователя root, поскольку он читает из некоторых защищенных областей сервера.
Итак, приступим, ладно?
Сначала установите переменные сценария:
#! / Bin / Bash
#
# Скрипт для проверки средних уровней загрузки системы, чтобы попытаться определить
# какие процессы делают это слишком высоко ...
#
# 07Jul2010 tjones
#
# установить среду
dt = `дата +% d% b% Y-% X`
# Очевидно, измените следующие каталоги на то, где на самом деле хранятся ваши файлы журналов
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysql Log = "/ var / log / mysqld.log"
# первая остановка - это стандартная электронная почта для отчетов. Второй - для сотового телефона (с сокращенным отчетом)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
машина = `hostname`
# Следующие три предназначены для использования mytop - используйте пользователя db с соответствующими правами
dbusr = "имя пользователя"
dbpw = "пароль"
db = "yourdatabasename"
# Ниже приведен уровень нагрузки, который нужно проверить - 10 действительно высокий, поэтому вы можете его снизить.
levelToCheck = 10
Затем проверьте уровень загрузки, чтобы увидеть, должен ли сценарий продолжаться:
# Установить переменные из системы:
loadLevel = `cat / proc / loadavg | awk '{print $1}`
loadLevel = $ (printf "% 0.f" $ loadLevel)# если уровень нагрузки больше, чем вы хотите, запускаем скрипт. В противном случае выход 0
если [ $loadLevel -gt $levelToCheck ]; тогда
echo ""> $ tmpfile
echo "*************************************" >> $ tmpfile
echo "Дата: $ dt" >> $ tmpfile
echo "Проверить загрузку системы и процессы" >> $ tmpfile
echo "*************************************" >> $ tmpfile