Анализ трассировки работы программы
Добавлен механизм анализа трассировки выполнения программы.
Иногда лога SQL запросов нехватает для анализа работы программы. К примеру сумарно SQL отрабатывает за 1 секунду, а страница формируется значительно дольше.
Для настройки трассировки необходимо указать в конфигурационном файле PHP:
xdebug.auto_trace=0
xdebug.trace_format=1
xdebug.trace_enable_trigger=1
xdebug.trace_output_dir="/var/www/html/logs/xdebug"
xdebug.show_mem_delta=1
xdebug.var_display_max_data=128
xdebug.collect_params=4
xdebug.collect_return=On
xdebug.trace_options=1
xdebug.trace_output_name= %H-%R-%r.trace
xdebug.profiler_output_name = %s.%t.profile
xdebug.trace_output_dir
должна содержать путь до папки /logs/xdebug
в вашем проекте
Важно: не включать параметр auto_trace=1
, т.к. тогда при каждом запросе будет производиться трассировка скриптов, которая сильно замедлит работу программы.
Для включения лога трассировки можно передать параметром GET XDEBUG_TRACE=1
или установить куку XDEBUG_TRACE=1
. Если устанавливаете куки, то необходимо удалить ее после снятия лога трассировки.
Можно воспользоваться плагинами для браузеров. (к примеру для Chrome https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc?utm_source=chrome-app-launcher-info-dialog)
Для перехода на форму анализа логов необходимо нажать кнопку в DebugBar "Анализ Xdebug"
После сохранения трассировки логов можно выбрать любой файл для анализа. После открытия файла будет видна сводная информация о файле.
Доступны две таблицы для дальнейшего анализа. Список файлов - сводная таблица по количеству памяти и времени потраченное на выполнение.
Возможно просмотреть информацию о всех функциях вызванных в файлах. Для этого необходимо нажать на имя файла.
Список функций показывает сводную таблицу о всех функциях, которые были вызваны и сколько раз. Можно нажать на название функции для просмотра в каких файлах был произведен вызов данной функции.
Можно открыть весь лог нажав кнопку "Отрыть весь стектрейс". Данная форма позволяет детально проработать каждый шаг выполнения программы с таймлайнами и параметрами вызова.
Форма "Стектрейс с фильтрами" позволяет фильтровать все запросы по времени затраченное на исполнение. Позволяет детализировать самые долгие функции.
При просмотре детальной информации по файлу/функции будет доступна таблица с детальной информацией выполнения функций. Суммарное время выполнения/ОЗУ считается от начала вызова функции и завершения выполнения. Присутствует эффект матрешки, т.е. каждый вышестоящий вызов будет включать в себя время выполнения вложенных запросов.
Для анализа строки можно просмотреть параметры вызова функции. К примеру на скрине видна задрежка при чтении файла в файле FileFS.php. При раскрытии параметров будет виден идентификатор файла.
Если нажать на идентификатор операции будет открыт стек трейс вызова. Это позволит понять цепочку вызова, которая в итоге вызвала функцию, которая привела к долгой работе скрипта.