url image

Mod performance

Статья давно не обновлялась, поэтому информация могла устареть.

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/

Этот материал был полезен?

Скидка 25% новым клиентам!
Закажи сервер сегодня и получи скидку на первый месяц аренды!