XHProf

Источник цитаты

Для PHP 7 - использовать форк https://github.com/RustJason/xhprof/ (ветка php7)

XHProf Bitrix

Инструмент для профилирования и оптимизации выполнения 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

Ссылки

Использование 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/

Результаты профилирования

Печать/экспорт