2.8.24. Профилирование PHP

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

Что может показать профилирование:

  • Какие функции и сколько раз выполнялись в процессе работы скрипта.
  • Сколько времени выполнялась каждая функция.
  • Какой объём оперативной памяти использовался функцией и пиковые значения потребления.
  1. Включите профилировщик.
  2. Добавьте в список свой IP или адрес разработчика.
  3. Выполните действия на сайте, для которых нужно собрать информацию.
  4. Изучите отчёты или предоставьте их разработчику сайта для поиска способов оптимизации.
Для профилирования используется расширение Tideways XHProf.

Важные моменты:

  • Профилировщик можно включать для сайтов с версиями PHP 7.0-8.1.
  • На время работы профилировщика автоматически отключается параметр open_basedir.
  • Отчёты профилировщика хранятся в дисковом пространстве хостинг-аккаунта и занимают объём и иноды.

Работа с профилировщиком выполняется в разделе «ХостингМои сайты → Профилирование PHP»:

Примечания:

  • При включении в php.ini подключается расширение и добавляется директива вида auto_prepend_file = "/home/{$login}/.system/profiler/profiler_{$host_id}.php" для запуска профилировщика.
  • Директива добавляется отдельно и не влияет на добавленные ранее auto_prepend_file.

Выберите нужное время в блоке «Профилирование PHP» и нажмите «Включить профилировщик»:

Добавьте в список IP, при запросах с которых будет запускаться профилировщик:

Примечания:

  • Файлы отчётов хранятся в каталоге .system/profiler в корневом каталоге хостинг-аккаунта.
  • Отчёты удаляются только вручную. Таким образом, они остаются доступными для анализа после отключения профилировщика.

Все результаты работы профилировщика выводятся в блоке «Отчёты профилировщика»:

В блоке выводится текущий объём, который занимают на диске существующие отчёты. Здесь же можно удалить все отчёты кнопкой «очистить».

Колонки списка:

  • «Дата» — дата и время обработки запроса.
  • «URL» — URL запроса.
  • «CPU» — время работы процессора при обработке запроса.
  • «Время выполнения» — время работы скрипта при обработке запроса.
  • «Пиковое потребление памяти» — максимальное потребление памяти при обработке запроса.

Кнопка «Подробный отчёт» открывает подробную информацию о работе скрипта при обработке запроса:

В подробном отчёте:

  • «Дата и время запуска скрипта».
  • «IP» — IP, с которого был запрос.
  • «Точный URL» — URL, к которому был запрос.
  • «Количество вызовов функций» — количество функций, выполненных скриптом при обработке запроса.
  • «Распределение функций по времени выполнения» — график с долями времени выполнения разных функций по отношению к общему затраченному времени.

Колонки общего списка вызванных функций:

  • «Функция» — название функции.
  • «Количество вызовов» — сколько раз выполнялась функция.
  • «Показатели с учётом дочерних функций»:
    • «Время выполнения» — сколько времени заняло выполнение функции.
    • «CPU» — сколько времени процессор был занят выполнением функции.
    • «Потребление памяти» — сколько памяти было использовано в процессе выполнения функции.
    • «Пиковое потребление памяти» — пиковое значение использования памяти при выполнении функции.
  • «Показатели без учёта дочерних функций» — аналогично показателям выше, только без учёта дочерних функций.
Прочерк означает, что профайлеру не удалось достоверно посчитать значение показателя.

Нажатие на название функции открывает подробный отчёт по этой функции:

Колонки отчёта по функции:

  • «Функция» — название функции.
  • «Количество вызовов» — сколько раз выполнялась функция.
  • «Время выполнения, мкс» — сколько времени заняло выполнение функции.
  • «CPU, мкс» — сколько времени процессор был занят выполнением функции.
  • «Потребление памяти, байт» — сколько памяти было использовано в процессе выполнения функции.
  • «Пиковое потребление памяти, байт» — пиковое значение использования памяти при выполнении функции.

Функции в списке делятся на три группы:

  • «Текущая функция» — функция, информация о которой открыта в данный момент.
  • «Родительские функции» — функции, из которых вызывалась текущая функция.
  • «Дочерние функции» — функции, которые вызывались из текущей функции.

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

Нажмите «Отключить профилировщик» в блоке «Профилирование PHP» или дождитесь времени автоматического отключения:

Содержание