Анализ трассировки работы программы

Добавлен механизм анализа трассировки выполнения программы.

Иногда лога 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"

После сохранения трассировки логов можно выбрать любой файл для анализа. После открытия файла будет видна сводная информация о файле.

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

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

1.png

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

1.png

Можно открыть весь лог нажав кнопку "Отрыть весь стектрейс". Данная форма позволяет детально проработать каждый шаг выполнения программы с таймлайнами и параметрами вызова.

1.png

Форма "Стектрейс с фильтрами" позволяет фильтровать все запросы по времени затраченное на исполнение. Позволяет детализировать самые долгие функции.

1.png

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

1.png

Для анализа строки можно просмотреть параметры вызова функции. К примеру на скрине видна задрежка при чтении файла в файле FileFS.php. При раскрытии параметров будет виден идентификатор файла.

1.png

Если нажать на идентификатор операции будет открыт стек трейс вызова. Это позволит понять цепочку вызова, которая в итоге вызвала функцию, которая привела к долгой работе скрипта.

1.png