Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Tools (http://mangos.ytdb.ru/forumdisplay.php?f=22)
-   -   Bash скрипт проверки сервера на зависание (http://mangos.ytdb.ru/showthread.php?t=1373)

deadangel 04.06.2010 15:10

Bash скрипт проверки сервера на зависание
 
В последнее время сборки от Карателя у меня на сервере страдают фризами. Сервер намертво ловил фриза и не мог из него выбраться. установка значения MaxCoreStuckTime = 60 все так же не помогла исправить это положение. Потому набросал простенький скрипт и поставил его на авто выполнение каждые 10 минут. Возможно кому нибудь он и пригодится. У меня он словил 100% фризов. Тестировался в течении 3 недель.

Собственно сам скрипт:
Код:

#!/bin/sh

DATE=$(date)
FREEZ=$(mysql -u<username> -p<password> realmd < /opt/mangos/etc/freezcheck/check.sql | grep "[0|1]")

case $FREEZ in
0)
echo '['$DATE'] Проверка на фриз сервера прошла успешно.'
;;
1)
echo '['$DATE'] Зависание сервера. Сервер перезапущен.'
/opt/mangos/stop
/opt/mangos/start
;;
*)
echo '['$DATE'] Неверное значение ответа мускуля: '$FREEZ
;;
esac

А вот файл с запросом для этого скрипта check.sql:
Код:

SELECT IF ((UNIX_TIMESTAMP() - (`starttime`+`uptime`)) >= 700 , 1, 0) AS 'freez'  FROM `uptime` ORDER BY `starttime` DESC LIMIT 1

rsa 04.06.2010 17:55

Этот скрипт ловит фризы не мангоса а мускуля. Может проще разобраться с его настройкой и настройкой стека на машине?
PS крайний фриз на сборке Карателя я видел полгода назад. из-за собственных кривых ручек.

tempura 04.06.2010 17:57

эм... А если на мускле что-то кроме мангоса висит - что будет?

PSZ 04.06.2010 18:48

MaxCoreStuckTime побольше поставить - и все. У меня стоит 10 минут - ни разу не имел проблем с "зависанием".

Astellar 05.06.2010 22:59

Хм. Не совсем грамотная проверка-то выходит. Можно сделать иначе. Заставьте ядро каждые N минут писать в какой-нибудь файлик статистику по работе. И в скрипте проверяйте время последней модификации файла тоже раз в N минут. После M таких проверок и необнаружения изменений файла - перезапускайте сервер.

Konctantin 05.06.2010 23:01

а soap если задействовать для этих целей?

Astellar 05.06.2010 23:18

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

CruncH 05.06.2010 23:34

SOAP использовать не правильно тут=)
Тут наверное правильнее будет использовать сокеты, пытаться приконектиться к серверу.
На баше может быть и нету нужного функционала, но на питоне такой скрипт сваять можно быстро.

Astellar 05.06.2010 23:51

Ну при сокетах еще желательно было бы ответ получить вида "Yes, I'm alive", а не гадать на кофейной гуще, по какой причине сервер нашу попытку подключения сбросил/мы с таймаутом вывалились/вообще подключиться не удалось. Так что ядро модифицировать все равно придется.

zhenya 06.06.2010 06:57

как то писал скрипт мониторинга.. просто ps+grep+awk...

CPU=`ps aux | grep $pid | grep -v grep | | awk '{print $3}' | awk -F. '{print $1}'`

Astellar 06.06.2010 09:27

Цитата:

Сообщение от zhenya (Сообщение 8115)
как то писал скрипт мониторинга.. просто ps+grep+awk...

CPU=`ps aux | grep $pid | grep -v grep | | awk '{print $3}' | awk -F. '{print $1}'`

Лишняя "|", это если кто-то использовать захочет. Да и не всегда по использованию процессора можно о зависании сервера говорить :)

zhenya 06.06.2010 13:26

Да, действительно лишняя ;)


Текущее время: 21:01. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS