Анализ нагруженных частей Php кода с помощью xhprof

xhprof - инструмент, который позволяет собирать информацию как на локальной машине, так и на продакшене.

Выбор пал на xhprof, так как при определенных дополнениях можно визуально отслеживать работу классов и строить графики.

1. Ставим на Ubuntu 14.04 // никак не перебью на новую =)

Штатная команда НЕ ПОДОШЛА, у меня в репозиториях такого нет (apt-get install xhprof), по этому пришлось собирать его на коленке.

sudo apt-get install php-pear php5.6-dev php5.6-mcrypt

sudo php5enmod mcrypt

sudo pecl install xhprof-beta

Установка ведется через pecl, а выше нужные расширения для php и подключение mcrypt. Установочные пакеты зависят от версии линукса и от версии php.

2. Для своей версии php задаем определение в mods-available:

sudo nano /etc/php/5.6/mods-available/xhprof.ini

в файл внесем строки

extension=xhprof.so

Если все прошло правильно, то можно подключить модуль xhprof (под свою версию php).

sudo php5enmod xhprof

sudo service apache2 restart

3. Проверка установленного пакета:

php -i | grep xhprof

xhprof varsion
4. Начало работы:
После удачной установки и колдовства, в коде перестала бросать ошибки такая конструкция.

<?php

// Инициализируем xhprof
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

foreach ([1,2,3] as $v) {
    echo $v;
}

// Останавливаем xhprof после выполнения программы
$xhprof_data = xhprof_disable();

XHPROF_FLAGS_CPU - анализ процессорного времени

XHPROF_FLAGS_MEMORY - анализ памяти

Использование очень простое, нужный для отладки код следует поместить между xhprof_enable() и xhprof_disable(). В $xhprof_data будет содержаться вся информация. Но для человеческого понимания она сложна.

5. Для более удобной обработки данной информации:

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

cd /var/www;wget http://pecl.php.net/get/xhprof-0.9.4.tgzgzip -d xhprof-0.9.4.tgztar -xvf xhprof-0.9.4.tar

Следует распаковать содержимое архива в директорию, которая будет доступна как домен. К примеру на локальной машине это /var/www/xhprof-0.9.4

5.1. Заводим локальный адрес (будет xhprof.loc на apache):

sudo nano /etc/apache2/sites-available/xhprof.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName xhprof.loc
    ServerAlias www.xhprof.loc
    DocumentRoot /var/www/xhprof-0.9.4/xhprof_html
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/xhprof-0.9.4/xhprof_html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

sudo nano /etc/hosts

127.0.0.1     www.xhprof.loc
127.0.0.1     xhprof.loc

sudo service apache2 restart

Как уже понятно, рабочая папка этого движка - xhprof_html. Фронтовая часть выглядит так:

xhprof_html

5.2. Использование в коде:

Для использования, после xhprof_disable() следует добавить строки определения места, куда сбрасывать отработанные логи.

<?php

// Инициализируем xhprof
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

foreach ([1,2,3] as $v) {
    echo $v;
}

// Останавливаем xhprof после выполнения программы
$xhprof_data = xhprof_disable();

// Стаживает данные с идентификатором ""
// Обратите внимание, что путь, в который мы распаковали все
include_once "/var/www/xhprof-0.9.4/xhprof_lib/utils/xhprof_lib.php";
include_once "/var/www/xhprof-0.9.4/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "product");

product xhprof

Выдаст много информации по всем запущенным классам:

xhprof_info

6. Графический отчет:

Так же xhprof позволяет генерировать графический отчет, по которому понятно что и куда стучится. Для этого нужна установка graphviz.

sudo apt-get install graphviz

graphviz

Использовал источники: источник1 источник2

2342 0

Комментарии

Пока нет ни одного отзыва. Оставьте отзыв первым
Только авторизованные пользователи могут оставлять комментарии Вход

Похожие статьи

Создать и скачать CSV на PHP

Рассмотрим возможность быстрого создания CSV файла с автоматическим скачиванием файла. Рассмотрим формирование, разделители и header для возможности скачать файл.