Установка xhprof для php:

sudo apt-get install php5-xhprof

Перезапускаем Apache:

sudo service apache2 restart

Распечатываем phpinfo(); и проверяем подключился модуль или нет?

Если его нету, значит ссылка на конфиг не туда стала или не создалась.

Проверяем /etc/php5/apache2/conf.d появилась ли там ссылка на конфиг xhprof.ini.

Если нет, то создаем линку сами и перезапускаем apache.

sudo ln -s /etc/php5/mods-available/xhprof.ini /etc/php5/apache2/conf.d/20-xhprof.ini
sudo service apache2 restart

Проверяем подключение xhprof, проверяем подключен ли 20-xhprof.ini:

На скрине указана версия 0.9.2, хотя при инсталяции отобразилась версия 0.9.4, но это нам не помеха.

Теперь можем профилировать наш код.

  1. В начале страницы включаем профайлинг с помощью xhprof_enable();
  2. В конце страницы выключаем профайлинг с помощью xhprof_disable() и сохраняем собранные данные с помощью save_run();
  3. Далее анализируем.

Функция xhprof_enable() принимает в качестве аргументов флаги:

XHPROF_FLAGS_CPU для фиксирования статистики процессора,

XHPROF_FLAGS_MEMORY — для памяти,

XHPROF_FLAGS_NO_BUILTINS — для игнорирования встроенных функций.


Для сохранения и дальнейшего разбора полетов, нам необходимо установить инструмент для анализа профайла.

Скачиваем архив с инструментом анализа со страницы xhprof: http://pecl.php.net/package/xhprof , берем версию 0.9.4.

У на сервере или локальном ПК создаем папку доступную через localhost или отдельный домен, в который разархивируем скачанный архив: http://pecl.php.net/get/xhprof-0.9.4.tgz

Теперь мы можем сохранять профайл.

https://xn--d1acnqm.xn--j1amh/altadmin/posts/edit/188

Код для отслеживания выглядит примерно так:

// Инициализируем профайлер - будем считать и процессорное время и потребление памяти
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

// Профилируемый код # Останавливаем профайлер $xhprof_data = xhprof_disable(); # Сохраняем отчет и генерируем ссылку для его просмотра include_once "/var/www/html/xhprof-0.9.4/xhprof_lib/utils/xhprof_lib.php"; include_once "/var/www/html/xhprof-0.9.4/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_test"); echo "Report: http://localhost/xhprof-0.9.4/xhprof_html/index.php?run=$run_id&source=xhprof_test"; echo "\n";

/var/www/html/xhprof-0.9.4 - путь к папке которую мы разархивировали в ней необходимые нам библиотеки.

Report: http://localhost/xhprof-0.9.4/xhprof_html/index.php?run=57c32f3095d21&source=xhprof_test

Ссылка в моем случае ведущая к дебагу, она будет распечатана при исполнении скрипта сайта.

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

Мы можем сортировать функции кликая на заголовки таблицы.

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

Показатели:
• Total Incl. Wall Time (время затраченное на выполнение функций с учетом ожидания ответов от сокетов, файловой системы и других ресурсов )
• Total Incl. CPU (время затраченное на выполнение функций)
• Total Incl. MemUse (использование памяти)
• Total Incl. PeakMemUse (пиковое использование памяти)
• Number of Function Calls (количество вызовов функций)


Еще есть возможность графического отображения отчета. Но для этого надо убедится что у вас установлена библиотека graphviz:

apt-get install graphviz

После в профиле нужно нажать [View Full Callgraph] для отображения и вуаля:


Теперь можете анализировать и улучшать код.

Удачи всем))