Профайлинг приложения PHP с помощью XHGui

php
профайлинг
xhgui

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

На данный момент у нас есть два отличный инструмента для профайлинга. Одно от Derick Rethans – Xdebug, другое от Facebook – XHProf.

Мы остановимся на XHProf, отличный инструмент, но с неудобным интерфейсом. XHGui призван улучшить интерфейс для доступа к данным, сделать его приятным для использования.

Установка XHProf

Давайте установим XHGui и все необходимые для его работы компоненты. Вам нужно MongoDB, PHP, и PECL.

Прежде всего, давайте установим MongoDB.

1
sudo apt-get install mongodb

Нам также понадобится библиотека PHP для MongoDB – в репозиториях, как правило устаревшие версии, лучше взять из Pecl. Если вы еще не установили pecl, сделайте это с помощью команды:

1
sudo apt-get install php-pear

Установим библиотеку PHP для работы с MongoDB:

1
sudo pecl install mongo

Не забудем создать файл со следующим содержанием /etc/php5/mods-available/mongo.ini:

1
extension = mongo.so

Устанавливаем сам xhprof

1
sudo pecl install xhprof-beta

Создаем файл /etc/php5/mods-available/xhprof.ini:

1
extension = xhprof.so

Не забудем перезапустить веб сервер.

  • Настройка XHGui

XHGui можно скачать с GitHub.

Устанавливаем для директории cache доступ для записи и запускаем скрипт установки:

1
php install.php

Если вы сделали все правильно то должны увидеть следующею картинку.

Включение XHGui для вашего хоста

Для того чтобы XHGui начал профайлинг вашего сайта, настроим добавим следующие настройки

1
2
3
4
5
6
7
8
9
10
11
<VirtualHost *:80>
    ServerName example.local

    DocumentRoot /var/www/example/htdocs/
    php_admin_value auto_prepend_file /var/www/xhgui/external/header.php

    <Directory /var/www/example/htdocs/>
        Options FollowSymLinks Indexes
        AllowOverride All
     </Directory>
</VirtualHost>

С этого момента можно посылать запросы на ваш сайт, или запустить нагрузочное тестирование с помощью Apache Bench.

Получения ваших данных

XHGui отобразит список запросов, которые были обращены к сайту. Столбцы указаны: * URL – адрес запроса * Time – когда был сделан запрос * Wall Time – сколько времени занял запрос * CPU – нагрузка процессора * Memory used – память использовано * Peak memory usage – пиковое использование памяти

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

Другим информативным (и невероятно симпатичный) XHGui особенностью является CallGraph, он показывает вам, затраты времени в виде графа:

Интерпретации данных

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

Попробовать следующий подход: * Отсортировать функции по использование CPU (по убыванию), и посмотреть на самые ресурсозатратные запросы. * Проанализировать затратные запросы и попытаться оптимизировать их.

После того как вы внесли некоторые изменения, заново провести профайлинг и посмотреть на получившиеся улучшения. XHGui имеет встроенные способы очень элегантно сравнить работает, просто нажмите на кнопку “Compare this run”.

Повторяя этот процесс раз за разом, вы сможете добиться того что отклик вашего приложения на запрос пользователя будет минимальным. Что вызовет комфорт работы пользователя с ним.