2 декабря 2016

Настройка XHprof в Drupal 7

Алексей Доронин
Руководитель, разработчик, дизайнер

Профилирование — это сбор данных о том, как выполняются разные участки кода в вашей программе. Имея такие данные, можно оптимизировать быстродействие приложения или просто получше узнать, как работает ваш код. Для PHP существует два основных решения: Xdebug и XHprof.

С помощью Xdebug можно профилировать код и анализировать статистику, но есть серьезный недостаток — эту утилиту нельзя использовать на боевых сайтах, она слишком тяжелая (ресурсоёмкая).

Альтернатива — XHprof, это решение от компании Facebook, которое создаёт минимальную нагрузку на приложение. Рассмотрим настройку XHprof и Drupal 7.

Drupal 7, Devel, Ubuntu 14, NGINX, PHP5-FPM

Установка и настройка

Установим XHprof:

sudo pecl install xhprof-beta

Создадим директорию и добавим права:

mkdir /tmp/xhprof
chmod 777 /tmp/xhprof

Добавим расширение в php.ini (php5/fpm/php.ini и php5/cli/php.ini):

extension=xhprof.so
xhprof.output_dir=/tmp/xhprof

Перезапускаем и проверяем:

sudo service php5-fpm restart
php --ri xhprof

Настройка Devel

Нам потребуется модуль Devel. В настройках модуля /devel/settings нужно прописать директорию, куда установился XHprof (директория должна была отобразиться при установке):

Настройка NGINX

В конфигурационный файл NGINX (который отвечает за исследуемый сайт) добавляем новый локейшен. Не забудьте изменить адрес установки /usr/share/php/, если у вас он отличается:

location /xhprof_html {
    root /usr/share/php/;
    index index.php;
    location ~ ^/xhprof_html/(.+\.php)$ {
        try_files $uri =404;
        root /usr/share/php/;
        include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        fastcgi_pass php-fpm;
    }
}

Перезапускаем NGINX: 

sudo service nginx restart

В итоге, должны заработать URL вида: http://MYSITE.COM/xhprof_html/index.php

Пример данных 

Описание значений

Граф вызовов

Можно просматривать визуальный граф вызовов, для этого нужно установить graphviz:

sudo apt-get install graphviz

На странице с перечнем функций будет ссылка View Full CallGraph, она ведёт на схемы вызовов, тяжелые – выделены цветом. 

Профилирование фрагмента кода

Можно выделить свою функцию или кусок кода:

xhprof_sample_enable();

$result = some_my_function($fields['nid']->content);

$xhprof_data = xhprof_sample_disable();

dsm($xhprof_data);

На выходе будет массив с данными.