Установка 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, но это нам не помеха.
Теперь можем профилировать наш код.
- В начале страницы включаем профайлинг с помощью xhprof_enable();
- В конце страницы выключаем профайлинг с помощью xhprof_disable() и сохраняем собранные данные с помощью save_run();
- Далее анализируем.
Функция 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] для отображения и вуаля:
Теперь можете анализировать и улучшать код.
Удачи всем))
Комментарии
Как быть с php7?
ОтветитьОтак)
Ответитьgit clone https://github.com/RustJason/xhprof
git branch -b php7 origin/php7
cd extension
phpize
./configure --with-php-config=/usr/bin/php-config
sudo make && sudo make install
mkdir /var/tmp/xhprof
Понял) Думал, без форков обойтись. Не судьба) Спасибо!
ОтветитьАвтор - красивчик
ОтветитьВ очередной раз захожу подглядеть код)
ОтветитьМне респект)))
Спасибо за пост! Единственный работающий ман. Поправьте ссылки - "Report: http://localhost/xhprof-0.9.4/xhprof_html/index.php?run=57c32f3095d21&source=xhprof_test" для старта просто "Report: http://сайт.ру/xhprof-0.9.4/xhprof_html/index.php" где будет список. а то новички вроде меня путаться будут.... ну и куда какой код вставлять. У вас больше для просвещенного пользователя ман. тяжеловато было допиреть что куда)
Ответить