Защита и наблюдение перегрузок

+40
3.92K
Иллюстрация

Здравствуйте, друзья!

Мониторинг и слежение за сервером конечно же прерогатива специального ПО, однако и php дает небольшие возможности для этого. Для удобства быстрого "а что там у нас с нагрузкой" сделан этот компонент, который:

— мониторит заданное значение load average сервера;
— при превышении нагрузки закрывает сайт и показывает текст ошибки, отдавая при этом корректный header «503 Service Unavailable»;
— при превышении нагрузки уведомляет по email (можно указать несколько);
— при превышении нагрузки может только фиксировать сам факт превышения не предпринимая каких-либо действий;
— показывает на главной странице админки текущую нагрузку;
— в блоке статистики в админке показывает зафиксированные перегрузки.

Функционал построен на использовании функции sys_getloadavg, поэтому на Windows платформах работать не будет.

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

Порог наблюдения нагрузки можно указывать больше 100%, но это уже будет означать оверлоад, при постоянстве которого стоит задуматься об оптимизации сервера.

Технические требования:

InstantCMS: не ниже 2.4.0;
Операционная система: UNIX-like (Linux, FreeBSD и т.п.);
Включенная функция php: sys_getloadavg

Установка стандартная.



Подписывайтесь на нашу страницу в Вконтакте
+1
globator globator 8 лет назад #
Круто. Хотел установить скрипт на сервер что бы мониторить нагрузку. Думаю для начало этого будет достаточна dance
+1
Def Def 8 лет назад #
Отличное дополнение! Только не нашел где в статистике показывается
+2
solntsev solntsev 8 лет назад #
""
0
Def Def 8 лет назад #
Странно, у меня нет такого. Версия 2.4.0
0
Fuze Fuze 8 лет назад #
Значит не все файлы скопировались или к ним нет доступа или третье, разное)
0
solntsev solntsev 8 лет назад #
Тоже не сразу появилось. Попробуйте отключить кеширование.
0
Fuze Fuze 8 лет назад #
Попробуйте отключить кеширование
Это разумеется.

http://docs.instantcms.ru/manual/addons

Документация:
Для максимальной корректности, перед установкой дополнения лучше всего отключить кеширование в общих настройках сайта, если оно включено.
0
Def Def 8 лет назад #
Лучше тоже помещать инфо об этом во вермя процесса установки) ступил я)
0
Def Def 8 лет назад #
компонент показывает общую нагрузку на сервер или только нагрузку от данного сайта?)
0
Fuze Fuze 8 лет назад #
Общую, серверную. LA всего сервера.
0
AmDmKo AmDmKo 8 лет назад #
Будьте добры, подсказать!)
А если VPS-ка? нагрузка моего ядра или "также" всего сервера?)
+1
Fuze Fuze 8 лет назад #
Нагрузка вашей ноды. LA - это не нагрузка процессора только.
0
WowChih WowChih 8 лет назад #
""

полет нормальный Intel(R) Xeon(R) CPU E5-1650
+1
vikont vikont 8 лет назад #
Что сказать.... крутой компонент! Единственно для него не хватает почасового графика. Данные идут каждую минуту, а результат не виден.
0
Fuze Fuze 8 лет назад #
Данные идут каждую минуту, а результат не виден.
Фиксируются только перегрузки. Полный график перегрузок сделаю позже.
0
vikont vikont 8 лет назад #
Для нагруженных сайтов важно знать когда может наступить Перегрузка, чтобы вовремя предпринять меры предосторожности. А это возможно узнать из анализа суточного графика нагрузки. Так что ждем. Может быть со временем какой автомат удастся прикрутить и вовремя запускать нужные действия.
0
Def Def 8 лет назад #
Когда нагрузка падает сайт открывается сам или надо вручную его открывать? Было бы хорошо, если бы автооткрытие происходило, т.к позволит в случае отсутствия админа сайта открываться ему самому при снижении нагрузки. Например установить время в 15 минут
0
Fuze Fuze 8 лет назад #
Когда нагрузка падает сайт открывается сам или надо вручную его открывать
Сам открывается, когда нагрузка падает.
0
vikont vikont 8 лет назад #
Зачем закрывать сайт? Как минимум 80% лишней нагрузки создают:
1. Скрипт сайта - на сегодняшний день он почти идеальный
2. Проблемы с базой данных - а вот ошибки в базе данных могут расти неожиданно и в геометрической прогрессии.. Достаточно сделать Восстановление и Оптимизацию базы, нагрузка резко упадет.
3. Висуны - сессии которые зависают в силу различных стечений обстоятельств. Достаточно их сбросить и нагрузка падает.
4. Зависание процессов (Демонов) в самой операционной системе - Здесь только перезагрузка! Но это когда у тебя свой VDS, а на виртуальном хостинге доступ к ОС закрыт.

Думаю достаточно реализовать пункты 2 - 3 и это решит массу проблем без остановки сайта, тем более, что простая остановка не решит проблем с базой. Даже Висуны могут не отбиться.
0
Fuze Fuze 8 лет назад #
Зачем закрывать сайт
Опциями можно выставить, чтобы сайт не закрывался, а только лишь фиксировались нагрузки выше заданной.

Достаточно сделать Восстановление и Оптимизацию базы, нагрузка резко упадет.
Это не решает проблем с базой, а убирает фрагментацию. А проблемы с базой - это не оптимизированные запросы, неправильная конфигурация mysql и т.п.
п. 3, 4 если у вас на сервере что-то зависает, то вариант только один - менять сисадмина, т.к. на здоровой системе ничего хаотично зависать не должно. Кроме этого, то, что вы называете "висунами" в большинстве случаев вообще нагрузку не дают, все зависит от того, что ушло в это состояние и по каким причинам. Например, если ушел процесс ffmpeg во время конвертации, то да, будет висеть со 100% нагрузкой. А все процессы, связанные с работой сайта с вероятностью 99,9% никогда не зависнут, если у вас конечно не Windows.

К первому пункту претензий нет smile

простая остановка не решит проблем с базой
С чего вы решили, что большой LA связан только с нагрузкой базы данных? Есть масса причин, по которым на сервере возникает перегрузка. И самая обычная причина - это просто выполнение непосредственных задач. Только задач может быть слишком много для данного железа/конфигурации.
На highload системах с высокопосещаемыми сайтами даже минутный "отдых" даст системе "продышаться". Очередь процессов очистится и LA, как следствие, упадет.
0
vikont vikont 8 лет назад #
Вы верно пишите, причин для большой нагрузки много, но если одни решаются сменой сисадмина smile или переходом на более мощный сервер, то другие и они более частые (из моего опыта на разных хостингах) это как раз неожиданные проблемы с базой данных!
Восстановление базы решает вопрос накопления ошибок, а Оптимизация - дефрагментация. Все верно. Эти 2 действия надо делать каждую неделю, но кто за этим следит, да еще на виртуальном хостинге smile

Собственно почему я вообще писал... остановка сервера решит вопрос с нагрузкой, но это не популярный для пользователя метод! Поэтому есть смысл останавливать сайт если другие методы не дали результат. Другие методы я описал выше. Они дадут время для решения основной причины.
+1
PIN PIN 8 лет назад #
Понравилось, +потенциал
0
Aleks Shultz Aleks Shultz 7 лет назад #
А для первой ветки такой классной штуки не будет?
0
Fuze Fuze 7 лет назад #
Она есть, только я не проверял ее работоспособность на последней версии первой ветки и там нет учета ядрер процессора, т.е. корректно работать не будет, если ядер больше одного.
0
Евгений Евгений 6 лет назад #
На 2.7.2 не работает. Полезное дополнение, будет ли обновление
0
dwd dwd 7 лет назад #
У меня почему-то наблюдается странная картина - количество ядер определено скриптом вроде как верно, их 4



однако правильно показывает загрузку сервера скрипт только если указать вручную, что яро одно :



При количестве ядер, равном 4, индикатор загрузки не переваливает и за 30% в то время как сервер уже не справляется с запросами, что соответственно сопровождается тормозами при загрузке сайта. Также мои догадки о неверности показателей в скрипте подтверждаются показателями из панели управления VBulletin, расположенного на том же сервере:

0
dwd dwd 7 лет назад #
2-ю и 3-ю картинки перепутал местами, сорри.
0
Fuze Fuze 7 лет назад #
Вы не поняли сути работы. В вашем случае варианта два, либо ядер действительно одно, либо их 4, а тормоза при загрузке сайта связаны с чем то другим. То, что у вас показывает VBulletin скорее всего чистый вывод sys_getloadavg, который не приводит числа к понятным процентам с учетом кол-ва ядер.
0
dwd dwd 7 лет назад #
Нет, ядер в моем случае точно четыре:



Пораскинул мозгами и пришел к выводу, что, наверное вы правы. Просто VBulletin старичок и не умеет считать ядра. Выходит, что, по меркам VBulletin, для 4-х ядер 100%-но значение load average = 4, стало быть в процентах это в 4 раза меньше, чем показывает VBulletin в панели. Спасибо за ответ, пойду искать причину такого поведения. Уже второй день ломаю голову над тем, почему сайт так тяжело грузится, все остальные сайты на сервере летают:



Время загрузки страницы 280-310 мск и не меняется ни при каких условиях. Отключал все виджеты, вырезал из шаблона все JS и CSS, искал, что тормозит загрузку страницы. Бесполезно, время загрузки страницы не меняется вообще.
Это мой первый сайт, работающий на второй ветке Инстанта,
0
Fuze Fuze 7 лет назад #
Просто VBulletin старичок и не умеет считать ядра
Да нет. Там просто голый вывод sys_getloadavg. У нас же показывается реальная загрузка (для конечного пользователя), с учётом кол-ва ядер.
Отключал все виджеты, вырезал из шаблона все JS и CSS, искал, что тормозит загрузку страницы.
Это как раз не при чем. Вы пытаетесь снизить клиентское время, в то время как движок показывает время генерации страницы на сервере. Включите режим отладки и посмотрите какой sql запрос тормозит. Если PHP до версии 5.6, то поставьте xcache например. Настройте mysql, вероятно вы при установке InstantCMS выбрали движок базы данных innodb, а mysql не настроили.
0
dwd dwd 7 лет назад #
Включите режим отладки и посмотрите какой sql запрос тормозит.

mySQL работает как часики, тормозов нет(MyISAM). Процессорного времени и свободной памяти много, почему так медленно грузились страницы я, если честно так и не понял.

Это как раз не при чем. Вы пытаетесь снизить клиентское время, в то время как движок показывает время генерации страницы на сервере.

Вам наверное виднее, но по моей логике 20 виджетов на главной странице это лишних два десятка запросов к базе плюс рендер содержимого этих виджетов. По идее на быстродействие должно влиять. Но как показала практика не влияет. Огромное спасибо за подсказку с xcache - после установки скорость загрузки страниц выросла почти вдвое, до 150-180 мск(версия PHP - 5.3.28). Теперь это уже вписывается в рамки разумного, доброго, вечного.))

Еще от автора

Как собрать обновление и релиз InstantCMS
Небольшой экскурс в сборку дистрибутива установки и обновления InstantCMS с GitHub.
InstantCMS 2.14.0 release candidate
Здравствуйте Тестируем релиз-кандидат InstantCMS 2.14.0. От того, как мы с вами выявим баги в новой версии, зависит стабильность релиза.
Черная пятница, скидки на премиум компоненты
Привет, друзья! Сегодня день, которого многие давно ждали - Черная пятница!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.