Профайлинг приложения PHP с помощью XHGui
Профайлинг – средство, редко используется в обычной практике разработки приложения. Потребность в нем возникает, когда наше приложения находиться под нагрузкой, и мы хотим понять какое место в коде тормозит работы его.
На данный момент у нас есть два отличный инструмента для профайлинга. Одно от Derick Rethans – Xdebug, другое от Facebook – XHProf.
Мы остановимся на XHProf, отличный инструмент, но с неудобным интерфейсом. XHGui призван улучшить интерфейс для доступа к данным, сделать его приятным для использования.
Установка XHProf
Давайте установим XHGui и все необходимые для его работы компоненты. Вам нужно MongoDB, PHP, и PECL.
Прежде всего, давайте установим MongoDB.
1
|
|
Нам также понадобится библиотека PHP для MongoDB – в репозиториях, как правило устаревшие версии, лучше взять из Pecl. Если вы еще не установили pecl, сделайте это с помощью команды:
1
|
|
Установим библиотеку PHP для работы с MongoDB:
1
|
|
Не забудем создать файл со следующим содержанием /etc/php5/mods-available/mongo.ini:
1
|
|
Устанавливаем сам xhprof
1
|
|
Создаем файл /etc/php5/mods-available/xhprof.ini:
1
|
|
Не забудем перезапустить веб сервер.
- Настройка XHGui
XHGui можно скачать с GitHub.
Устанавливаем для директории cache доступ для записи и запускаем скрипт установки:
1
|
|
Если вы сделали все правильно то должны увидеть следующею картинку.
Включение XHGui для вашего хоста
Для того чтобы XHGui начал профайлинг вашего сайта, настроим добавим следующие настройки
1 2 3 4 5 6 7 8 9 10 11 |
|
С этого момента можно посылать запросы на ваш сайт, или запустить нагрузочное тестирование с помощью Apache Bench.
Получения ваших данных
XHGui отобразит список запросов, которые были обращены к сайту. Столбцы указаны: * URL – адрес запроса * Time – когда был сделан запрос * Wall Time – сколько времени занял запрос * CPU – нагрузка процессора * Memory used – память использовано * Peak memory usage – пиковое использование памяти
Вы можете всегда получить боле подробную информацию о каждом запросе.
Другим информативным (и невероятно симпатичный) XHGui особенностью является CallGraph, он показывает вам, затраты времени в виде графа:
Интерпретации данных
Имея много статистических данных легко в них запутаться, трудно понять, с чего начать.
Попробовать следующий подход: * Отсортировать функции по использование CPU (по убыванию), и посмотреть на самые ресурсозатратные запросы. * Проанализировать затратные запросы и попытаться оптимизировать их.
После того как вы внесли некоторые изменения, заново провести профайлинг и посмотреть на получившиеся улучшения. XHGui имеет встроенные способы очень элегантно сравнить работает, просто нажмите на кнопку “Compare this run”.
Повторяя этот процесс раз за разом, вы сможете добиться того что отклик вашего приложения на запрос пользователя будет минимальным. Что вызовет комфорт работы пользователя с ним.