Содержание
XHProf
Для PHP 7 - использовать форк https://github.com/RustJason/xhprof/ (ветка php7)
Инструмент для профилирования и оптимизации выполнения PHP-скриптов. XHProf
поддерживает сравнение двух запусков (иерархический DIFF отчет) и умеет объединять несколько запусков для усреднения данных.
Установка
Установка XHProf для PHP 7
Клонируем и устанавливаем расширение:
sudo apt-get install git php7.0-dev cd /usr/share/ git clone https://github.com/RustJason/xhprof cd xhprof/extension phpize ./configure --with-php-config=/usr/bin/php-config sudo make && sudo make install
Установка XHProf для PHP 5
cd /usr/share/ git clone https://github.com/phacility/xhprof --depth 1 cd xhprof/extension/ phpize ./configure make make install make test
Установка XHProf для Remi (Remi's RPM repository)
На примере PHP 5.6
yum --enablerepo=remi,remi-php56 install php56-php-pecl-xhprof.x86_64 service httpd restart
phpinfo();
Настройка XHProf
Исправляем конфиг PHP, добавляя расширение и прописываем путь до логов:
- php.ini
[xhprof] extension=xhprof.so xhprof.output_dir=/var/path-to-logs
Включаем модуль
# для PHP5 sudo php5enmod xhprof # для PHP7 cd /opt/php70/etc/php.d sudo ln -s ../mods-available/xhprof.ini
Перезагружаем веб-сервер. Для построения графиков устанавливаем пакет:
sudo apt-get install graphviz
Ссылки
- Форк Uplofiler лучше подходит для PHP 5.5+, но в PHP7 не работает
- GUI интерфейс для него, потребуется также MongoDB.
Использование XHProf
В отмеченном месте - код для профилирования
- sample-xhprof.php
define('XHPROF_DEBUG', extension_loaded('xhprof') && $_COOKIE['test'] == 1 && true); // заменить на false для отключения if (defined('XHPROF_DEBUG') && XHPROF_DEBUG) { $utils_path = "/usr/share/xhprof/xhprof_lib/utils/"; require_once($utils_path.'xhprof_lib.php'); require_once($utils_path.'xhprof_runs.php'); xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY + XHPROF_FLAGS_NO_BUILTINS); } // код для профилирования if (defined('XHPROF_DEBUG') && XHPROF_DEBUG) { $profiler_namespace = 'someapp'; // пространство запусков $xhprof_data = xhprof_disable(); $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace); }
Быстрый способ замерить время операции:
$begin_time = time() - 1272000000 + floatval(microtime()); //скрипт $end_time = time() - 1272000000 + floatval(microtime()) - $begin_time; die(var_dump($end_time*1000));
Просмотр отчета XHProf
Необходимо добавить веб-интерфейс для просмотра отчетов.
# сменить рабочий каталог на каталог сайта, доступный из веба, например: cd /var/www/site.ru # поставить симлинк на веб-интерфейс ln -s /usr/share/xhprof/xhprof_html
После этого отчеты можно будет увидеть тут: http://site.ru/xhprof_html/