PHP поиск «узких» мест в коде. Xdebug + WinCacheGrind

узкие места кода

Узкие места — это части кода, которые являются основными потребителями времени и ресурсов, во время своего выполнения.
Если с ресурсами все более или менее нормально, то со временем выполнения, на одном из моих ресурсов, определенно проблема. Главная страница формировалась порядка 1500ms, что не приемлемо.

Для заинтересованных, время отработки снизилось до 400ms, что допустимо для такого рода проектов.

Удалось найти несколько узких мест, связанных с ошибками программирования, причем в одном случае незначительная ошибка помноженная на многократный вызов процедуры (70-80 раз) серьезно повлияла на общее время.

Для работы нам понадобится расширение для php под названием xdebug. Не буду описывать процедуру установки, опишу необходимые нам параметры:

[xdebug]
xdebug.profiler_enable=1
xdebug.extended_info=0
xdebug.remote_enable=0
xdebug.auto_trace=0
xdebug.profiler_output_dir="/tmp"

После появления в phpinfo(); информации о расширении, мы создаем профиль тестируемого ресурса, путем запуска последнего (открытия сайта в браузере, можно несколько раз). В папке /tmp появятся дампы запуска, их мы будем скармливать WinCacheGrind.

WinCacheGrind это урезанный KCachegrind для Windows. Можно конечно установить web версию, но по удобствам работы, мне импонирует именно windows версия. Из функционала доступен просмотр вызовов функций, время выполнения и другие полезные плюшки.

WinCacheGrind пример работы

Дальше дело техники. Перемещаемся по дереву, и находим кусок кода, который создает нам ненужную нагрузку.
WinCacheGrind пример работы

Также рекомендую к прочтению статью про другие средства визуальной оценки производительности php приложений http://habrahabr.ru/post/75166/

Вы можете оставить комментарий ниже.