Заводим [Xhprof] на Nginx под Debian

Сегодня я расскажу, как разворачивал xhprof (профайлер для PHP) на php-fpm под Debian 7.

Давайте по порядочку.

1. Первым делом, надо установить профайлер. Устанавливается он (криво) pecl’ом:

sudo pecl install xhprof-0.9.4 # последняя версия на текущий момент

Примечание:

Во время установки, файлики xhprof’a помещаются в tmp, и после установки удаляются — и это грустно. Печально это потому, что нам нужны некоторые скрипты (см. ниже).

2. Т.к. установка лишает нас необходимых скриптов для запуска профайлера непосредственно в PHP, то скачиваем дополнительно xhprof ещё раз:

sudo pecl download xhprof-0.9.4

Собираем его:

tar -xvf xhprof-0.9.4.tar

cd xhprof-0.9.4/extension

phpize

./configure 

make && make install

В завершении этого этапа у нас должна быть структура следующего вида:

/xhprof-0.9.4/xhprof_lib — как раз тут лежат нужные нам скрипты для запуска

/xhprof-0.9.4/xhprof_html — это web-интерфейс профайлера

3. Далее прописываем сошку в php.ini:

sudo nano /etc/php5/cli/php.ini

extension=»/usr/lib/php5/20100525/xhprof.so»
xhprof.output_dir=»/tmp/xhprof» # Путь, куда будут складываться результаты. Почему именно такой, см. ниже.

Примечание (!):

Как я ни пытался, xhprof напрочь отказывался подхватывать директорию из инишника во время просмотра отчёта в web-интерфейсе. При этом во время формирования отчёта, директория норм подхватывалась. Чую, что проблема с путями и правами, но уже вечер и меня ломает с этим разбираться — завтра если будут силы, разберусь и отпишусь. 

А пока я прямо в либе /xhprof_lib/xhprof_runs.php подправил, чтобы по умолчанию профайлер за результатами стучался в /tmp/xhprof, т.к. изначально он стучится в /tmp/.

4. Создаём виртуалку для просмотра отчётов

Т.к. мы используем nginx, добавляем запись для хоста:

server {

listen 80;
server_name xhprof;
charset utf8;
root /path/to/xhprof-0.9.4/xhprof_html;
index index.php;
error_log /var/log/xhprof-error.log;

location ~ ^.+\.php {

fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;

}

}

Не забываем рестартнуть nginx:

sudo service nginx restart

5. Собственно запускаем профайлер в скрипте:

include_once «path/to/xhprof_lib/xhprof_lib.php»; // см. выше
include_once»path/to/xhprof_lib/xhprof_runs.php»;

# Инициализируем профайлер — будем считать и процессорное время и потребление памяти

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

/**

Тут выполняется наш код

**/

// Завершаем профайлинг и собираем данные
$xhprof_data = xhprof_disable();

$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, «xhprof_test»);// это же имя нужно передавать ниже в source

// Ссылка на отчёт: http://xhprof/index.php?run=$run_id&source=xhprof_test

6. Смотрим результаты

Если всё сделано верно, то результатом должна быть табличка типа такой:

xhprof

Здесь

  • incl — время на выполнение функции со всеми вложенными функциями
  • excl — то же время, но без вложенных функций

На этом пока всё (:

Профилируйте код на здоровье!

Реклама

Есть что сказать?

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s