Профилирование приложения – это сбор данных о скорости выполнения различных участков программы (файлов и функций). Существует множество инструментов профилирования PHP, но не все инструменты подходят для проведения анализа прямо в продакшне.
XHProf – мега простой профайлер, который собирает статистику прямо во время работы приложения почти без оверхеда.
Если приложение начинает работать медленно, профилирование поможет узнать, какая именно часть тупит. Результат профилирования – это обычно список выполненных функций и времени их исполнения.
Профилирование стоит делать до любой оптимизации приложения. В противном случае – будете руководствоваться догадками. Скорее всего неправильными.
Xdebug – мощное решение для PHP. Но сама платформа Xdebug настолько тяжелая, что ее нельзя использовать на [p204 работающих сайтах]. XDebug создает значительную нагрузку на ресурсы сервера и замедляет приложение.
С другой стороны, проблемы на “живом” сайте могут быть совершенно не такими, как в среде разработчика. Профилирование только на компьютерах разработчиков будет показывать лишь часть проблем.
Именно поэтому и было разработано решение XHprof. Оно предназначено для применения в работающих приложениях. Основная идея этого профайлера – создавать минимум нагрузки на приложение при этом собирать все необходимые данные о скорости работы. Решение разработано ребятами из Facebook и [https://github.com/RustJason/xhprof/tree/php7 поддерживается новыми версиями PHP].
На Debian XHprof есть в sid пакетах, поэтому:
apt-get install xhprof
Вы также можете [p203 собрать XHprof] самостоятельно.
Пусть у нас есть скрипт с таким кодом:
function execute()
{
# Какой-то PHP код
}
**execute();**
Проведем профилирование с помощью XHprof. Для этого на этой странице необходимо:
Это будет выглядеть так:
function execute()
{
# Какой-то PHP код
}
# Инициализируем профайлер
**xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);**
# Выполняем программу после включения профайлера
execute();
# Останавливаем профайлер после выполнения программы
**$xhprof_data = xhprof_disable();**
## Сохраняем результат профилирования в переменную $xhprof_data
Собранные данные можно проанализировать в интерфейсе XHprof для построения отчетов. Для этого, необходимо скачать исходники XHprof:
cd /var/www; wget http://pecl.php.net/get/xhprof-0.9.4.tgz gzip -d xhprof-0.9.4.tgz tar -xvf xhprof-0.9.4.tar
После этого необходимо внести изменения в скрипт:
## Новый код сохраняет отчет для использования в графическом интерфейсе
Чтобы увидеть отчет, необходимо настроить виртуальный хост на папку /var/www/xhprof-0.9.4/xhprof_html. Например, в Nginx:
server {
server_name xh.ruhighload.com;
root /var/www/xhprof-0.9.4/xhprof_html;
index index.php;
location ~* .(php)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
nginx -s reload
После этого появится список отчетов:
Таблица содержит список функций, которые были выполнены в рамках одной страницы с дополнительной информацией:
Чтобы построить графический отчет, убедитесь, что у Вас установлен graphviz:
apt-get install graphviz
После этого по ссылке [View Full Callgraph] будет доступна иерархия вызовов нашей страницы:
Ресурсоемкие участки кода выделены желтым (средние) и красным (самые тяжелые). Это те участки кода, которые используют множество ресурсов относительно всей остальной программы. Это может быть одна медленная функция или большое количество вызовов быстрой функции. В нашем примере функция str_replace() помечена красным из-за 262 вызовов.
Интерфейс XHprof также позволяет просматривать агрегатную информацию сразу с нескольких отчетов. Для этого run_id передаются через запятую:
http://xh.ruhighload.com/index.php?run=**53a894f6d5d9b,53a894fcf126e**&source=test
<h2>TL;DR
Используйте XHprof для профилирования PHP прямо в продакшне.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…