Введение
Об удобстве использования профайлера, да ещё с графическим интерфейсом и говорить нечего, особенно когда надо найти узкие места под нагрузкой.
tideways - само расширение php для сбора данных о производительности кода
xhgui - графический веб-интерфейс (см. скриншот выше), который, помимо всего прочего, сохраняет данные профилирования в mongodb и затем использует их для вывода статистики
Установка
Нам понадобятся:
- Настроенный веб-сервер с fastcgi (в данном примере nginx + php-fpm)
- Сервер mongodb
- php-mongod
- gcc, make, php-devel, чтобы собрать расширение tideways
Как собрать tideways
Клонируем репозиторий и собираем модуль
git clone https://github.com/tideways/php-profiler-extension.git
cd php-profiler-extension/
phpize
./configure
make
Ставим tideways.so
cp modules/tideways.so /usr/lib64/php/modules/tideways.so
Добавляем /etc/php.d/40-tideways.ini
; Configuration for Tideways Profiler Extension
; priority=40
extension=tideways.so
И рестартим php-fpm
service php-fpm restart
Устанавливаем xhgui
cd /var/www
git clone https://github.com/perftools/xhgui.git xhgui
Создадим конфиг, чтобы настроить частоту профилирования
cp xhgui/config/config.default.php xhgui/config/config.php
Кусок конфига xhgui/config/config.php, отвечающий за частоту профилирования
<?php
...
// Profile 1 in 100 requests.
// You can return true to profile every request.
'profiler.enable' => function() {
#return rand(1, 100) === 42;
return true; # будет профилировать каждый запрос
},
...
Включаем профилирование
Чтобы получить доступ к веб-интерфейсу xhgui, для nginx надо создать конфиг следующего вида:
server {
listen 8888;
# root directive should be global
root /var/www/xhgui/webroot/;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9001; # конечно, тут надо указать свой fastcgi обработчик
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
А теперь для сайта, на котором будет профилировани, надо к каждому выполняемому php-скрипту добавить файл от xhgui
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_ignore_client_abort off;
fastcgi_param SERVER_NAME $http_host;
fastcgi_param PHP_VALUE "auto_prepend_file=/var/www/xhgui/external/header.php"; # <--
}
Всё. Теперь нужно перезапустить nginx и подключиться к интерфейсу xhgui на 8888 порту