Профилирование PHP с XHProf — профессиональный инструмент для разработчиков web-приложений

Профилирование приложения — это сбор данных о скорости выполнения различных участков программы (файлов и функций). Существует множество инструментов профилирования PHP, но не все инструменты подходят для проведения анализа прямо на рабочем сайте.

XHProf и его форк Tideways — удобный и простой профайлер, который способен эффективно собирать статистику о работе приложения почти без снижения скорости работы вашего приложения (или вашего сайта).

Зачем профилировать код?

Если приложение начинает работать медленно (читай «сайт начал тормозить»), профилирование позволит узнать, какая именно часть наиболее медленная. Результат профилирования обычно представляет собой список выполненных функций вместе со временем их выполнения.

Процедура профилирования кода должна идти первой в процессе оптимизации приложения. Любые другие действия будут догадками и, скорее всего, неправильными. Нужно знать, что именно вызывает проблемы и «тормоза».

Профилирование — это процедура сбора и организации статистики о времени выполнения кода. Это не процесс оптимизации либо изменения программ. Результатом этого процесса обычно является расширенный отчёт о компонентах программы, статистика выполнения функций.

Именно для этого и было разработано решение XHProf. Оно предназначено для работы на реальных сайтах. Основная идея этого профайлера — создавать минимум нагрузки на приложение, при этом собирать все необходимые данные о скорости работы. Решение разработано специалистами из Facebook.

Как подключить php-профайлер в автоматическом режиме?

Наши специалисты потрудились и сделали данный процесс абсолютно автоматизированным.
Вам достаточно авторизоваться в панели управления хостингом, во вкладке «Сайты» выбрать нужный домен, кликнуть по иконке «Настройки PHP», перевести режим работы с mod_php на CGI и выбрать «Профайлер».

На включение данной функции может потребоваться некоторое время, обычно не более 10 минут.

Для php версий 5.2, 5.3, 5.4, 5.5, 5.6, 7.0 мы используем профайлер XHProf, для php версии 7.1 и выше мы используем профайлер Tideways.

После включения на каждой странице вашего сайта, обрабатываемой php, в нижнюю её часть будет встроен специальный блок со ссылками на файл отчёта (ссылка будет выглядеть примерно так:

domain-name.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX&source=someapp)
Включенный профайлер XHProf

А вот как будет выглядеть файл отчета:

PHP профайлер XHProf и Tideways

Таблица содержит список функций, которые были выполнены в рамках одной страницы с дополнительной информацией:

  • Calls — количество и процентное соотношение вызовов функции
  • Incl. Wall Time — время выполнения функции с вложенными функциями
  • Excl. Wall Time — время выполнения функции без вложенных функций
  • Incl. CPU — процессорное время с вложенными функциями
  • Excl. CPU — процессорное время без вложенных функций
  • Incl. MemUse — потребление памяти с вложенными функциями
  • Excl. MemUse — потребление памяти без вложенных функций
  • Incl. PeakMemUse — максимальное потребление памяти с вложенными функциями
  • Excl. PeakMemUse — максимальное потребление памяти без вложенных функций

Нужно заметить, что отчет, построенный с помощью tideways, может немного визуально отличаться от этого отчета, но суть от этого не меняется.

Графические отчеты

На каждом отчёте вы увидите ссылку [View Full Callgraph]. По клику на неё будет доступна иерархия вызовов нашей страницы:

Графический отчет профайлера XHProf и Tideways

Ресурсоёмкие участки кода выделены желтым (средние) и красным (самые тяжёлые). Это те участки кода, которые используют множество ресурсов относительно всей остальной программы. Это может быть одна медленная функция или большое количество вызовов быстрой функции. В нашем примере мы видим, что функция mysqli_multi_query() помечена красным из-за того, что выполняется медленнее всего.

Агрегатные отчеты

Интерфейс XHProf также позволяет просматривать агрегатную информацию сразу с нескольких отчетов. Для этого run_id передаются через запятую:

domain-name.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX,YYYYYYYYYYY&source=someapp

Технические особенности

  1. Автоматическое включение профайлера реализовано с помощью директив auto_append_file и auto_prepend_file, которые подключают два исполняемых php файла:

    — auto_append_file выполняет инициализацию объекта сбора статистики и запускает его работу;

    — auto_prepend_file завершает сбор статистики и генерирует файл-отчет со статистикой (в формате JSON);

    Если в процессе выполнения вашего скрипта будет вызвана функция exit() или die(), то auto_prepend_file не будет выполнен, файл статистики не будет сгенерирован и в нижнюю часть страницы не будет включен блок, со ссылками на файл отчета.

  2. Таким образом обращение к любой странице, обрабатываемой php, будет инициировать создание нового файла отчета, поэтому мы рекомендуем отключить профайлер после сбора статистики (обычно для этого хватает нескольких часов), во избежание переполнения дисковой квоты, которая может исчерпаться после генерации большого количества отчетов!
  3. Важно: профайлер будет работать только если сайт прикреплен к серверу по стандартному пути, автоматическими средствами (то есть, с помощью панели управления хостингом), в противном случае для настройки профайлера вам нужно обратиться в техническую поддержку Hostland.
  4. В автоматическом режиме профайлер подключается только к основному доменному имени, к поддоменам автоматического подключение профайлера не предусмотрено.
  5. В автоматическом режиме профайлер собирает статистику только скриптов с расширением .php и .php5
  6. Не возможно гарантировать бесперебойную работу сайта после подключения php-профайлера, поэтому, в случае некорректной работы сайта во время включенного профайлера его следует отключить и продолжить профилирование другими средствами.

Подведём итоги

Мы будем надеяться, что данный инструмент поможет вам сделать ваши сайты еще более быстрыми на хостинге Hostland.


В статье частично использованы материалы пользователя Den Golotyuk размещенные на сайте Ruhighload.com