Определяем нагрузку на сервер Apache

В этой статье я расскажу о том, как получить данные о работе web сервера Apache и представить их в удобном для анализа виде.
Начнем с получения данных.
Для того этого, необходимо подключить модуль mod_status. Он отслеживает работу сервера и показывает данные в виде обычной html страницы. С его помощью можно узнать:
1) количество процессов, выполняющих обработку запросов;
2) количество процессов, которые находятся в состоянии ожидания;
3) состояние каждого процесса, число обработанных им запросов и переданных данных;
4) общее количество запросов и переданных данных;
5) время работы сервера (запуск, перезапуск и общее время работы (uptime));
6) общая статистика: среднее число запросов в сек, байт на запрос, байт в сек;
7) использование CPU каждым процессом отдельно и apache’ем в целом в данный момент;
8 ) хосты и их запросы, которые обрабатываются в данный момент.
Переходим к настройке
1) Подключаем модуль.
Для этого в файле httpd.conf снимаем комментарий со строки
LoadModule status_module modules/mod_status.so
2) И открываем доступ к статистике. Добавляем в httpd.conf следующие строки
-
# включаем расширенную статиститку
-
ExtendedStatus On
-
-
<Location /server-status>
-
SetHandler server-status
-
-
Order Deny,Allow
-
Deny from all
-
Allow from 127.0.0.1
-
</Location>
Примечание. Здесь мы разрешили доступ к статистике только для адреса 127.0.0.1 (localhost). Для тестирования удаленного сервера вам нужно будет эту настройку изменить.
3) Перезапускаем apache.
Теперь можно просматривать статистику.
Для этого вводим в браузере URL
http://localhost/server-status
или, если вы хотите, чтобы страница обновлялась автоматически
http://localhost/server-status?refresh=15
(вместо цифры 15 ставите задержку в секундах).
Есть ещё один вариант страницы с этими же данными:
http://localhost/server-status?auto&refresh=3
Как видите, данные мы получили, но анализировать их, глядя на стандартную страницу не очень удобно.
Например, на скриншоте показано состояние процессов apache.

Символ подчеркивания означает, что процесс ожидает соединения, буква «W» - отправка ответа, точка – открытый слот без процесса.
Примечание. Скриншот сделан для локального севера, поэтому единственный процесс, который выполняет отправку запроса – это тот, который формирует страницу со статистикой.
Кроме того, если у вас данные постоянно обновляются (используется параметр refresh), то визуально оценить изменения будет очень сложно.
В этом случае удобно использовать скрипт, который будет собирать данные, и показывать их, например, в виде графика.
Можно написать такой его самостоятельно, но проще использовать готовый.
В качестве примера такого скрипта рассмотрим Visualize Apache Server Status (распространяется под LGPL лицензией).
Скрипт состоит из 3-х частей.
1) Конфигурационный файл (inc.config.php). Тут нужно указать адрес страницы со статистикой:
-
$statusurl = "http://localhost/server-status";
Время обновления данных и масштаб (используется для построения графика).
-
$refreshtime = 2;
-
$scalefaktor = 1;
2) Два скрипта (serverstatus.php и serverstatus2.php). Используются для отображения данных. Запускать можно любой из них. Информация одна и та же, только представлена по-разному.
serverstatus.php
serverstatus2.php
3) Класс, выполняющий анализ страницы со статистикой (class.parse_server_status.php). Самый интересный компонент
. Его можно использовать в собственных скриптах.
При работе вам будут нужны 2 метода этого класса.
1) parse_server_status($url) – в параметре $url задаем адрес страницы со статистикой.
2) getActiveConnections() – возвращает массив с информацией об активных соединениях. На данный момент этот массив содержит: идентификатор процесса, режим работы, время работы процесса, использование CPU, имя виртуального хоста и URI запроса.
Таким образом, несложно написать собственный скрипт, который будет сохранять данные о работе сервера.
Удачи!
Понравилась статья? Подписывайтесь на продолжение
!
Опубликовано в PHP, Web разработка
Комментарии (24)
Вы можете отслеживать обсуждение записи с помощью RSS 2.0 ![]()
Вы также можете оставить комментарий, или трекбек с Вашего сайта.










Спасибо за информацию, может оказаться крайне полезной.
Спасибо за информацию, теперь написание скрипта мне не кажется таким сложным.
А мне честно говоря, всё-таки хотелось понять, что такое Апач и с чем его едят, но в итоге получилось только ещё больше загрузиться…
Апач - это веб сервер. Получает на вход адреса (URL), обрабатывает их, если нужно может запустить PHP (или другой скприпт), и отправляет результат браузеру.
Это если кратко.
А вообще советую установить и поиграться, многие вещи станут сразу понятнее
Спасибо, стало немного понятней. Всё-таки, когда есть определение термину, тогда и предмет становится реальней для восприятия
спасибо большое, но у меня почему-то не пашет…
пишет
Warning: Invalid argument supplied for foreach() in /home/*******/serverstatus.php on line 141
можешь подсказать что не так?
на сколько я понял, массив $_SESSION["HostCountChart"] пустой. но как это исправить я без понятия…
хелп!
блин, потратил несколько часов, чтоб увидеть что этот класс вырезает по тем тегам, которых нет у меня в html-коде в server-status…
Я так понял вопрос снят?
честно говоря нет. точнее да.
вопрос другой, как заставить эту штуку работать?
может сервер-статус как-то изменить, или что?
поможешь?
А что именно не работает. Mod_status?
Прежде всего нужно проверить подключен он или нет. Для этого просто копируете настройки в httpd.conf.
И заходите на страницу
http://localhost/server-status
Если не видите ничего похожего на первый скриншот, значит, Mod_status не запущен. Нужно проверять конфиг и смотреть лог загрузки апача. Не забывайте перезапускать сервер после каждого изменения настроек.
В общем, чтобы сказать что-то конкретнее нужна дополнительная информация.
здорово все выложено и главное что доступно
Какой смысл использовать для таких задач php? Есть же perl, к тому же есть apachetop, который с логами работает и анализирует запросы, ну а если access логи отключены, то ясное дело, что нагрузка большая, обычными средствами тут не поможешь, все равно лучше выучить наконец top/ps и т.п. команды, чтобы хоть чуток понимать что происходит на сервере
Я согласен, варианты вроде ApacheTop удобнее.
Но этот скрипт используется только для визуализации данных, которые собирает mod_status. Поэтому, на мой взгляд, не играет большой роли на каком языке написан скрипт.
Ну да, в общем-то холивар.
Я вообще люблю попрофилировать, пооптимизировать
ну что-то не хочет работать гад. на запрос любого УРЛ, хоть server-status, хоть serverstatus2.php, хоть serverstatus.php, выдается одна и таже картинка. как на 1м скриншоте =(
Нужно проверить, работают скрипты или нет. Временно уберите их и попробуйте зайти на serverstatus2.php и serverstatus.php. Вы должны увидеть 404 ошибку.
Напишите, что получилось.
хм. действительно. что-то я и не подумал что так протестить можно. в общем кажется не работают. выдается все та же картинка (результат работы модуля) вместо 404-й странички.
еще момент. пытаюсь настроить это дело на хостинге, а не у себя. так что httpd.conf естественно не доступен. поэтому через .htaccess настраиваю. он лежит в том же каталоге и содержит одну строку "SetHandler server-status".
может в этом проблема?
Если вы видите результат работы модуля, значит где-то указано.
SetHandler serverstatus.php
SetHandler serverstatus2.php
Или что-нибудь в этом духе. Т.е. у вас запросы к этим скриптам перенаправляются на страницу модуля.
А вам нужно чтобы запрос передавался скрипту serverstatus.php, а он отправляет запрос на server-status, получает данные и показывает их вам.
В общем, попробуйте переименовать скрипт, например, serverstatus.php в myscript.php, а в его настройках укажите
$statusurl = "http://sitename/serverstatus";
Ну и конечно стоит проверить скрипты на localhost'е.
нде. провайдер сказал чтоб пошли покурили… =(
Интересно, спасибо, попробую
А я вообще считаю обязательной установку сервер-статуса)) уже сделал первую часть, сейчас буду подключать скрипт для отображения графиков. У нас на хостинге около 30 сайтов. Надеюсь теперь узнаю что же жрет память)) Статья на 5+
вот что при переносе на сервер :
PHP Warning: file(http://xxxx/server-status?dat=1245674519) [function.file]: failed to open stream: Connection timed out in …/www/class.parse_server_status.php on line 24
что-то с правами?
извиняюсь теги не поставил:
PHP Warning: file(http://xxxx/server-status?dat=1245674519) [function.file]: failed to open stream: Connection timed out in …/www/class.parse_server_status.php on line 24что-то с правами?))
Судя по описанию ошибки либо нет доступа к файлу, либо такого файла вообще нет (тут, правда, не файл, а URL).
Попробуйте из браузера зайти на http://xxxx/server-status
Если увидите страницу похожую на первый скриншот в этой статье - проверяйте настройки в inc.config.php, если не увидите - смотрите настройки mod_status.