Логотип

Документация по макросам и шаблонам UMI.CMS

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

Принцип действия

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

Как включить профайлер

Профайлер по-умолчанию выключен, и его код закомментирован во избежание избыточной нагрузки на систему при нормальной работе сайта. Для того чтобы включить профайлер - необходимо открыть файл с его кодом (это файл profiler.php в директории ~/libs/root-src/) и раскомментировать обе функциональные части кода, находящиеся в этом файле (блок констант и блок внутри функции). Обратите внимание, что после раскомментирования первой части кода определение константы "XSLT_PROFILER_LOG" остаётся закомментированным. Раскомментировать эту константу нужно только при наличии действительной необходимости (если вам нужен дополнительный лог именно XSLT-профайлера). После сохранения данных изменений, профайлер начинает работу и сохраняет данные о работающих процессах в файл лога, по умолчанию - в корне сайта.

Константы профайлера

В файле profiler.php заданы следующие константы:

  • SYSTEM_START_TIME - Точка старта. Не следует менять значение этой константы.
  • TIME_PROFILER_LEVEL - Уровень детализации отчёта. По умолчанию имеет значение "0". При выставлении большего числа (1, 2, 3 и т.д.) будут выводиться данные по точкам с соответствующим уровнем.
  • TIME_PROFILER_MINDELTA - Устанавливает минимальное время для шага. По умолчанию имеет значение "0" и в логе отображаются данные всех точек. Если же установить значение, например, "0.05" - то участки кода, отработавшие быстрее чем за 0.05 секунды от предыдущей точки, в лог выведены не будут.
  • TIME_PROFILER_PID - Устанавливает уникальный идентификатор для каждого запроса к сайту, чтобы различать несколько различных запросов между собой. Предназначается для удобства отслеживания информации по каждому запросу. По умолчанию используется php-функция "uniqid()".
  • TIME_PROFILER_LOG - Указывает место для создания файла лога. По умолчанию - в корне сайта.
  • XSLT_PROFILER_LOG - Указывает место для создания файла лога XSLT-профайлера. По умолчанию - в корне сайта.

Формат лога

В файле лога (по-умолчанию - time-profile.log в корне сайта) для каждой точки (строки) отображаются следующие характеристики (столбцы):

  • Id - Уникальный идентификатор запроса (например, "#4f901a26a66b6", если не было изменено значение константы "TIME_PROFILER_PID"), в течении выполнения которого была задействована данная точка.
  • Action - Название метки (например, "loadLangs started").
  • Run time - Время от начала работы профайлера до текущей метки. Значение отображено в секундах.
  • Action time - Время от прошлой метки до текущей (отображает длительность выполнения кода между двумя метками). Значение отображено в миллисекундах.
  • Memory - Количество памяти, занятое php-скриптом на данный момент.
  • Rusage - Показывает значения метрик "ru_utime" (процессорное время, использованое пользователем) и "ru_stime" (процессорное время, использованое серверным ПО). Подробнее об этих параметрах и функции getrusage() можно прочитать в 4-ом пункте данной статьи

Пользовательские метки в коде

С помощью профайлера разработчики могут проводить отладку системы на различных хостингах и проверять работу своего кастомного кода, расширяющего функционал системы.
Для проверки своего кода, достаточно проставить в нём метки, убедиться что профайлер включён, и открыть нужную страницу сайта в браузере. Метки расставляются функцией "showWorkTime({название_метки}, {уровень});". Рекомендуем давать меткам, стоящим в начале и в конце какого-либо участка кода, имена соответственно "something start" и "something end", чтобы визуально выделять два этих события в файле лога. Если установить параметр "{уровень}" больше "0" (например, "4"), то такая метка будет выведена только при установке константы "TIME_PROFILER_LEVEL" на "4" и выше.

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