Статья давно не обновлялась, поэтому информация могла устареть.
Mod_performance позволяет отслеживать нагрузку на сервер, создаваемую скриптами веб-приложений. Он покажет сколько оперативной памяти и CPU расходует конкретный скрипт. Рекомендуется использовать модуль в режиме отладки(включить, посмотреть, выключить).
Содержание |
Установка на Centos
Подключаем необходимые репозитарии:
Для i386 архитектуры:
rpm -ihv http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm
Для x86_64 архитектуры:
rpm -ihv http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm rpm -ihv http://mirror.neu.edu.cn/CentALT/5/x86_64/centalt-release-5-3.noarch.rpm
Устанавливаем модуль:
yum install mod_performance
Конфигурационный файл модуля находится здесь:
/etc/httpd/conf.d/mod_performance.conf
Создаем папку для хранения логов с соответствующими правами:
mkdir /var/log/mod_perf/ chown apache:apache /var/log/mod_perf/
Установка из исходников
Устанавливаем необходимые инструменты
Для Debian apt-get install -y apache2-prefork-dev libgtop2-dev libgd2-xpm-dev make Для CentOS yum install -y gcc make
Скачиваем последний архив модуля отсюда:
wget -O modperformance-master.zip https://github.com/bayrepo/mod_performance/archive/master.zip
Распаковываем:
unzip modperformance-master.zip
Переходим в директорию:
cd mod_performance-master
Собираем:
make
Если сборка не срабатывает, читаем README файл и следуем инструкции для вашей ОС.
Копируем библиотеку:
cp .libs/mod_performance.so /usr/lib/apache2/modules/ или cp .libs/mod_performance.so /usr/lib64/httpd/modules/
Копируем конфигурационный файл модуля:
cp mod_performance.conf /etc/apache2/mods-available/
Создадим загрузчик для модуля:
echo "LoadModule performance_module /usr/lib/apache2/modules/mod_performance.so" >> /etc/apache2/mods-available/mod_performance.load
Создаем папку для хранения логов с соответствующими правами:
mkdir /var/log/mod_perf/ chown www-data:www-data /var/log/mod_perf/
После настройки mod_performance.conf включаем модуль и перезапускаем веб-сервер.
a2enmod mod_performance /etc/init.d/apache2 restart
Настройка mod_performance.conf
Ниже представлены варианты mod_performance.conf, в зависимости от способа ведения логов. Самый быстрый и удобный способ - ведение логов в Sqlite Не забудьте раскомментировать соответствующую строку для вашей ОС.
Ведение логов в Sqlite
#CentOS #LoadModule performance_module modules/mod_performance.so #FreeBSD #LoadModule performance_module libexec/apache22/mod_performance.so #Debian #LoadModule performance_module /usr/lib/apache2/modules/mod_performance.so #openSUSE #LoadModule performance_module /usr/lib/apache2-prefork/mod_performance.so <IfModule mod_performance.c> PerformanceEnabled On PerformanceScript * PerformanceExtended Off PerformanceMaxThreads 100 PerformanceLogType SQLite PerformanceStackSize 2 PerformanceDB /var/log/mod_perf/perfdb PerformanceSocket /var/log/mod_perf/perfsock <Location /performance-status> SetHandler performance-status #Don't forget to set password this location </Location> </IfModule>
Создадим директорию для базы и перезапустим apache:
mkdir /var/log/mod_perf/ chown apache /var/log/mod_perf/
Перезагружаем Apache и проверяем в логах httpd-error.log, что модуль успешно подключился.
tail -f /var/log/httpd-error.log &; /usr/local/etc/rc.d/apache22 restart
В браузере статистика доступна по адресу: http://IP-сервера/performance-status Кликаем Request. По умолчанию для статистики выставлено Show output without analytics т.е. вывести собранную информацию без анализа, отфильтрованную по хосту, скрипту и URI.
Ведение логов в MySQL
Средствами панели ISPmanager создаем новую базу и пользователя для нее. Например: база perf_db, пользователь: perf, пароль к базе Xuamocn4.
#CentOS #LoadModule performance_module modules/mod_performance.so #FreeBSD #LoadModule performance_module libexec/apache22/mod_performance.so #Debian #LoadModule performance_module /usr/lib/apache2/modules/mod_performance.so <IfModule mod_performance.c> PerformanceHistory 3 PerformanceEnabled On PerformanceScript * PerformanceUseCanonical On PerformanceStackSize 2 PerformanceLogType MySQL PerformanceDbName perf_db PerformanceDbUserName perf PerformanceDBPassword Xuamocn4 PerformanceDBHost localhost PerformanceSocket /var/log/mod_perf/perfsock <Location /performance-status> SetHandler performance-status Order deny,allow Deny from all Allow from all #рекомендуется ограничить доступ Allow from ваш ip </Location> </IfModule>
/usr/local/etc/rc.d/apache22 restart
Статистику можно посмотреть так-же, как для варианта с Sqlite
Ведение логов в текстовый файл
#CentOS #LoadModule performance_module modules/mod_performance.so #FreeBSD #LoadModule performance_module libexec/apache22/mod_performance.so #Debian #LoadModule performance_module /usr/lib/apache2/modules/mod_performance.so <IfModule mod_performance.c> PerformanceEnabled On PerformanceHistory 1 PerformanceScript * PerformanceURI * PerformanceMaxThreads 80 PerformanceUseCanonical On PerformanceStackSize 1 PerformanceLogType Log PerformanceLog /var/log/mod_perf/perf.log PerformanceSocket /var/log/mod_perf/perfsock </IfModule>
/usr/local/etc/rc.d/apache22 restart
Теперь можно смотреть лог:
/var/log/mod_perf/perf.log
Записи пишутся в форме:
[2013-03-08 20:46:34] from example.ru (/index.php) script /home/user /data/www/example.ru/index.php: cpu 31.13 (0.104), memory 7.813902 (18.71), execution time 0.335381, IO: R - 0.000000 W - 1.000000 cpu 31.13 (0.104) проценты(секунды) 31,13 % CPU было использовано, 0,104 секунды система потратила именно на этот процесс. memory 7.81 (18.71) проценты(мегабайты) 7,8 % оперативной памяти было использовано или 18,71 мегабайт. execution time 0.335381 – длительность выполнения скрипта в секундах.
Возможные проблемы
Ошибки можно отследить в логах веб-сервера /var/log/httpd-error.log
При успешном запуске модуля, там будет:
mod_performance: version 0.3-12 loaded mod_performance: module enabled mod_performance: server started mod_performance: Performance daemon started successfully
Ошибка в логах веб-сервера:
Invalid argument: mod_performance: Can't load db library
это значит, что функция dlopen не может найти либу для работы с sqlite libsqlite3.so или libsqlite3.so.0. Решение: в файле /mod_performance/sql_adapter.c заменить строку lib_handle = dlopen("libsqlite3.so", RTLD_LAZY); на lib_handle = dlopen("libsqlite3.so.8", RTLD_LAZY); и пересобрать модуль.
- При gmake(FreeBSD), ошибка:
mod_performance.c:119:16: error: gd.h: No such file or directory mod_performance.c:120:21: error: gdfontt.h: No such file or directory mod_performance.c:121:21: error: gdfonts.h: No such file or directory mod_performance.c:122:22: error: gdfontmb.h: No such file or directory mod_performance.c:123:21: error: gdfontl.h: No such file or directory mod_performance.c:124:21: error: gdfontg.h: No such file or directory In file included from mod_performance.c:138: chart.h:59: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char t_create_pie' chart.h:62: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char t_create_polyline' chart.h:65: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char t_create_bars' gmake: *** [mod_performance.slo] Error 1
Не хватает /usr/ports/graphics/php5-gd или /usr/ports/graphics/gd
- При сборке модуля(Debian):
#make Makefile:28: /usr/share/apache2/build/special.mk: No such file or directory make: *** No rule to make target `/usr/share/apache2/build/special.mk'. Stop.
В зависимости от версии Apache выполнить: apt-get install apache2-prefork-dev или apt-get install apache2-threaded-dev
- В логах :
«Threads pool limit reached. Increase threads number» или «Threads pool limit reached. Increase threads number. Memory not watched»
Такое сообщение возникает при интенсивном поступлении запросов на сервер, когда потоков, выделенных в директиве PerformanceMaxThreads, не достаточно для отслеживания всех запросов. Увеличить PerformanceMaxThreads.
- Статистика не собирается(FreeBSD)
в графах CPU и memory нули.
Выполнить от root:
echo 'security.bsd.see_other_uids=1' >> /etc/sysctl.conf
echo 'security.bsd.see_other_gids=1' >> /etc/sysctl.conf
sysctl security.bsd.see_other_uids=1
sysctl security.bsd.see_other_gids=1
/usr/local/etc/rc.d/apache22 restart
Как смотреть статистику
После установки данного модуля, сама статистика о нагружающих скриптах доступна по адресу:
http://IP_адрес_вашего_сервера/performance-status
Если по этой ссылке открывается один из ваших сайтов, то нужно cделать следующее:
1. Зайти в панель ISPmanager. В разделе "WWW домены" создать любой домен.
2. Перейти в раздел "Список IP-адресов"(в модуле "Настройки сервера).
Поменять для основного IP-адреса "WWW-домен по умолчанию" на созданный в
пункте 2.
После этого вновь обратится по ссылке выше.
Если вы настроили Ведение логов в текстовый файл, то нужно подключится на сервер по SSH и просмотреть файл /var/log/mod_perf/perf.log, например командой: tail -f /var/log/mod_perf/perf.log
Особенности настройки
Данные о запросе сохраняются только после завершения запроса (только
после того как скрипт завершит работу, информация о нем появится в
логах)
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
Источник http://lexvit.dn.ua/category/wiki/