PHP профайлер tideways + xhgui

Введение

Об удобстве использования профайлера, да ещё с графическим интерфейсом и говорить нечего, особенно когда надо найти узкие места под нагрузкой.

tideways - само расширение php для сбора данных о производительности кода

xhgui - графический веб-интерфейс (см. скриншот выше), который, помимо всего прочего, сохраняет данные профилирования в mongodb и затем использует их для вывода статистики

Установка

Нам понадобятся:

  1. Настроенный веб-сервер с fastcgi (в данном примере nginx + php-fpm)
  2. Сервер mongodb
  3. php-mongod
  4. 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' =&gt; 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"; # &lt;--
    }

Всё. Теперь нужно перезапустить nginx и подключиться к интерфейсу xhgui на 8888 порту