Определяем нагрузку скриптов на сервер: mod_status и mod_performance

Имеем сервер с несколькими сайтами на CentOS. Задача — определить какой сайт и какой скрипт грузит сервер.

Первое расширение apache для этого — mod_status, он же Server Status. Как мне кажется, он обычно включен во все сборки CentOS. Если нет — придется установить.

Настроить доступ к модулю можно в конфиге апача /etc/httpd/conf/httpd.conf, вписав там адрес доступа

<Location /server-status-ваш-путь-к-статистике>

Так же доступны дополнительные настройки

  1. # ExtendedStatus - отображать расширенную информацию
  2.  # (немного медленнее, но информативнее)
  3.  # Доступно с версии Apache 1.3.2 и выше
  4.  # Допустимые значения: On или Off, по умолчанию - Off
  5.  ExtendedStatus On
  6.  
  7.  # SeeRequestTail - отображать первые (Off) или последние (On) 63 символа запроса
  8.  # К сожалению, весь запрос вывести не удастся
  9.  # Доступно с версии Apache 2.2.7 и выше
  10.  # Допустимые значения: On или Off, по умолчанию - Off
  11.  SeeRequestTail Off

В браузере вбиваем ip-вашего-сайта/server-status или ip-вашего-сайта/server-status?refresh=N, где N — кол-во секунд для обновления.

Для решения нашей задачи есть вариант и более навороченный — ведение логов и их последующий анализ в графическом виде.

Используемое для этого расширение apache — mod_performance.

Ставим его из репозитория (есть на centalt), создаем директорию для логов и даем апачу права на запись. 

  1. yum install mod_performance
  2. mkdir /var/log/mod_perf/
  3. chown apache:apache /var/log/mod_perf/

Редактируем файл конфигурации /etc/httpd/conf.d/mod_performance.conf

Лучше всего хранить статистику в базе SQLite

Раскомментируем запуск модуля для нашей ОС и вписываем пути к базе. Остальное можно оставить по умолчанию.

  1. #CentOS
  2. LoadModule performance_module modules/mod_performance.so
  3. PerformanceDB /var/log/mod_perf/perfdb
  4. PerformanceSocket /var/log/mod_perf/perfsock

Для конфиденциальности меняем так же путь к статистике.

<Location /performance-status-ваш-путь-к-статистике>

Чтобы mod_performance не грузил зря собой сервер, рекомендуется отключать его в моменты, когда он уже не требуется:

PerformanceEnabled Off

После изменений любых настроек необходимо перезапускать апач

service httpd restart

Доступ к статистике соответственно по адресу ip-вашего-сайта/performance-status

Дополнительные настройки

Данные о запросе сохраняются только после завершения запроса (только после того как скрипт завершит работу, информация о нем появится в логах)

PerformanceMaxThreads — число одновременно запускаемых потоков для отслеживания за процессами сервера. Следует помнить, что за каждым процессом сервера наблюдают два потока. Т.е. если сервер одновременно принимает 40 запросов, то необходимо выделить 80 потоков. Если потоков недостаточно, веб-сервер работает как обычно, просто все лишние запросы не отслеживаются. 

PerformanceStackSize — этот параметр устанавливает размер памяти стека (stack size memory). Каждый создаваемый демоном поток имеют общую с демоном память, но свою память стека. По умолчанию, эта память для потока ~8-10Мб. Т.е. на 80 потоков необходимо ~640-800Мб памяти — что очень много. 

Поэтому рекомендуется данный параметр выставить в 1 или 2.

PerformanceEnabled On/Off – включить или выключить демона. В значении Off демон будет запускаться, но запросы отслеживать не будет. 

PerformanceHistory — сколько дней хранить логии в базе данных

PerformanceScript — за какими скриптами следить, параметр принимает регулярное выражение (напр. следить только за php-скриптами: \.php)

PerformanceHostFilter — позволяет отслеживать только конкретный сайт или группу сайтов (перечисляются через пробел): PerformanceHostFilter example.host1.com example.host2.com

Подробнее почитать о mod_performace можно на сайте автора.