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

Владимир | | PHP, Web разработка.

В этой статье я расскажу о том, как получить данные о работе 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.

workers

Символ подчеркивания означает, что процесс ожидает соединения, буква «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

visualize apache 1 thumb

serverstatus2.php

visualize apache 2 thumb

3) Класс, выполняющий анализ страницы со статистикой (class.parse_server_status.php). Самый интересный компонент 😉 . Его можно использовать в собственных скриптах.

При работе вам будут нужны 2 метода этого класса.

1) parse_server_status($url) – в параметре $url задаем адрес страницы со статистикой.

2) getActiveConnections() – возвращает массив с информацией об активных соединениях. На данный момент этот массив содержит: идентификатор процесса, режим работы, время работы процесса, использование CPU, имя виртуального хоста и URI запроса.

Таким образом, несложно написать собственный скрипт, который будет сохранять данные о работе сервера.

Удачи!