понедельник, 7 мая 2018 г.

Debian и xhprof

xhprof - довольно полезный профилировщик, который можно использовать в проде. Ставится (кусочек) так:
# apt-get install php5-xhprof

(при отсуствии - смотрим сюда)

Но сделав потом dpkg -L php5-xhprof увидим, что файлов там совсем чуть - .so файл, .ini и чуть обвязки, но нет никакого анализатора. Поэтому теперь смотрим версию так
# php -i | grep xhprof
xhprof => 0.9.2

Проверим, что модуль подключился:
php -m | grep xhprof

Подключаем его к апачу: делаем graceful или restart и вызываем phpinfo(). Смотрим версию (можно качать более новые файлы, но лучше когда версии идентичны, меньше потенциальных проблем). xhprof 0.9.2

качаем сорцы для анализатора
# wget http://pecl.php.net/get/xhprof-0.9.2.tgz
# tar -vzxf xhprof-0.9.2.tgz 
и xhprof-0.9.2 можно перенести например в /var/www

Если хочется последнюю версию, то можно взять тут
git clone https://github.com/facebook/xhprof.git
Теперь, чтобы анализатор заработал, нужно выставить xhprof.output_dir
sudo vim /etc/php5/mods-available/xhprof.ini
...
xhprof.output_dir="/var/tmp/xhprof"

также есть такой файл
/usr/share/php5/xhprof/xhprof.ini

Этот /var/tmp/xhprof нужно создать и выставить ему права на чтение-запись для тех, кого профилируем. Также нужно проверить, что каталог будет существовать при перезагрузке и при необходимости донастроить его создание, например через systemd-tmpfiles. Или используем другой путь, который не будет очищаться и куда могут писать все сайты, например /var/lib/xhprof

И добавить чуть кода в проект
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
...
$xhprof_data = xhprof_disable();
include_once "xhprof_lib/utils/xhprof_lib.php";
include_once "xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_test");
echo "Report: http://domain.tld/xhprof_html/index.php?run=$run_id&source=xhprof_test";
echo "\n";

Для удобства просмотра 
apt-get install graphviz

теперь нам нужно подключить xhprof_html к сайту. Самый простой вариант - копируем /var/www/xhprof-0.9.2/xhprof_* себе в проект, чуть сложнее через alias (через nginx не получится - там нужно выполнять php скрипты. Точнее получится, но по факту будет копия location /, с заворотом на некий обработчик php - fastcgi, apache, пример есть тут или тут)

Через алиас:
sudo vim /etc/apache2/conf.d/xhprof.conf

#alias /xhprof_html "/usr/share/php/xhprof_html/"
alias /xhprof_html "/var/www/xhprof-0.9.2/xhprof_html/"

Может сразу не заработать, вероятно надо в /usr/... класть.

И ещё чуть линков
https://drupal.stackexchange.com/questions/88359/install-and-configure-xhprof-ubuntu
http://tigor.com.ua/blog/2009/12/13/profiling-php-with-xhprof/
http://debian-help.ru/articles/xhprof-i-xdebug-profilirovanie-profiling-koda-php/

Комментариев нет:

Отправить комментарий