PHP. Установка и использование XHProf

О профилировании

Данные профиля могут помочь вам улучшить ваше приложение, то есть достичь определенных целей, к примеру, понизить потребление памяти, уменьшить время генерации страницы и так далее.

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

Прежде всего, стоит оптимизировать функции, который требуют больше всего времени на исполнение. После того, как все оптимизировано и кажется, что улучшать больше нечего, стоит отсортировать функции по количеству вызовов и поработать над его понижением. Даже если PHP работает быстро, то стоит подумать, нужно ли вызывать функции так часто?

Почему именно XHProf, а не XDebug?

Основные недостатки XDebug

  • огромный overhead (время выполнения программы умножается на 2+)
  • оптимизация под XDebug на 90% безрезультатна после его отключения
  • нельзя включать на проде (почему? см. выше)

Основные достоинства XHProf

  • практически не даёт overhead’а
  • можно использовать на продакшене (почему? см. выше)

Немного об XHProf

Для начала несколько слов о возможностях самого XHProf. Это профайлер для PHP, написанный на C как расширение. Он был разработан в Facebook и выложен в открытый доступ. Имеет несколько форков (uprofiler, Tideways), полностью совместимых на уровне формата выходных данных.

XHProf расставляет таймеры вокруг всех вызовов функций/методов. Его использование сопряжено с некоторыми накладными расходами. Но они не такие большие и позволяют использовать его в продакшене.

Результатом работы XHProf является массив элементов который содержит название функции/метода и параметры вызова: сколько cpu, количество вызовов, потребление памяти и т.д

Установка XHProf

Клонируем и устанавливаем расширение:

sudo apt-get install php7.0-dev
cd /usr/share/git clone https://github.com/RustJason/xhprofgit checkout -b php7 origin/php7cd xhprof/extensionphpize # что это такое можно прочитать тут https://www.php.net/manual/ru/install.pecl.phpize.php./configure --with-php-config=/usr/bin/php-config
make && make install

если выскакивает ошибка «configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.», то надо выполнить следующую команду:

sudo apt-get install re2c

Если вы видите сообщения о ошибках но make прошел успешно, не стоит беспокоится, он даже в таком состоянии достаточно работоспособен. Как советует make, выполните make test.

Настройка XHProf

Исправляем конфиг PHP, добавляя расширение и прописываем путь до логов  в php.ini:

[xhprof]extension=xhprof.soxhprof.output_dir=/var/path-to-logs

Включаем модуль:

cd /opt/php7.0/etc/php.dsudo ln -s ../mods-available/xhprof.ini

перезагружаем веб-сервер. Для построения графиков устанавливаем пакет:

sudo apt-get install graphviz

Использование

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);}

Функция xhprof_enable() принимает в качестве аргументов флаги:

  • XHPROF_FLAGS_CPU для фиксирования статистики процессора
  • HPROF_FLAGS_MEMORY — для памяти
  • XHPROF_FLAGS_NO_BUILTINS — для игнорирования встроенных функций.

xhprof_disable() выключит профайлер и вернет собранную статистику.

Просмотр отчета XHProf

Собранные данные можно проанализировать в интерфейсе XHprof для построения отчетов.

вид отчета

настройка показа отчета:

# сменить рабочий каталог на каталог сайта, доступный из веба, например:cd /var/www/site.ru# поставить симлинк на веб-интерфейсln -s /usr/share/xhprof/xhprof_html

После этого отчет можно будет увидеть тут: http://site.ru/xhprof_html

Что еще можно использовать для профилирования php кода

  • Blackfire — профилировщик кода для PHP
  • Pinba — сервис для получения realtime-статистики от работающих приложений без накладных расходов на её сбор
  • Tideways — расширение для профилирования PHP (дальнейшее развитие XHProf, работа с PHP 7)
admin

Recent Posts

После включения диагностического запуска не удается войти в Windows — как исправить?

Некоторые пользователи, экспериментируя с конфигурацией системы в окне msconfig могут столкнуться с ситуацией, когда после…

2 недели ago

WinScript — очистка и настройка Windows 11 и 10

На сайте не раз публиковались обзоры программ, предназначенных для очистки или настройки последних версий Windows.…

2 недели ago

Предварительный просмотр накопительного обновления не устанавливается — решение

При установке некоторых обновлений Windows 11, имеющих в названии «Предварительный просмотр накопительного обновления», многие пользователи…

2 недели ago

FixExec — восстановление ассоциаций .exe, .bat и .com файлов

Некоторые пользователи Windows 11, 10 и предыдущих версий системы могут столкнуться с ситуацией, когда исполняемые…

2 недели ago

Ошибка 0x800705b4 при обновлении Windows 11 и 10 — как исправить?

При установке обновлений Windows 11/10 некоторые пользователи могут столкнуться с ошибкой с кодом 0x800705b4 и…

2 недели ago

Обслуживание вашей версии Windows 11 окончено — что делать?

Пользователи Windows 11 могут столкнуться с сообщением «Обслуживание вашей версии Windows окончено» (Your version of…

2 недели ago