Профилирование с XHProf и XHGui

Профилирование с XHProf и XHGui

Когда дело доходит до загрузки веб-страницы , терпение может лопнуть. Исследования, и проведенные примеры больших имен в веб-технологии, таких как Google, Microsoft и Yahoo! показали, что даже доли секунды различия во время загрузки страницы может оказать существенное влияние на конверсий. 

Если это не достаточная причина, Google объединенное время загрузки страницы  скорость загрузки сайтов, в ​​рейтинг поисковика забило еще в апреле 2010 года, значит, это также влияет на SEO.

Ряд факторов может повлиять на время загрузки страницы: скорость в сети, веб-сервер или конфигурация нагрузки, использование постоянного хранения, кэширование или отсутствие таковых, и время отклика приложений от Facebook или Twitter. Что бы проверить скорость загрузки страницы используйте расширение для браузера PageSpeed.

Профилирование средствами PHP

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

Профилирование PHP скриптов, требует установку расширении PHP. Два популярных расширения для этих целей Derick Rethans  »  Xdebug  и Facebook,  XHProf  . В этой статье основное внимание будет уделено XHProf.

Установка XHProf

XHProf доступен через PECL, поэтому его установка не сложная. Например, он может быть установлен на Debian-based системы:



sudo pecl install xhprof-beta
echo 'extension=xhprof.so' | sudo tee /etc/php5/conf.d/xhprof.ini >/dev/null
sudo apachectl restart


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

XHGui размещается на GitHub, это значит что у вас есть два варианта установки. Первый вариант предполагает использование Git для клонирования репозитория, который обеспечивает простой способ обновить его позже.



git clone git://github.com/preinheimer/xhprof.git


Если вы предпочитаете не использовать Git, второй вариант является просто скачать и распаковать архив, отражение текущего состояние хранилища вот такое:



wget -O xhgui.tar.gz 

https://github.com/preinheimer/xhprof/tarball/master

&& tar -zxf xhgui.tar.gz


На данный момент, вы можете использовать файл INSTALL через остальную часть процесса для конкретной среды сервера. Xhprof_html каталог содержит файл index.php для загрузки интерфейса XHGui, поэтому убедитесь, что ваш веб-сервер настроен принять, путь документа в корень вашего хоста, используя символические ссылки, псевдоним директиву, или что-то в этом роде.

SQL для создания таблиц базы данных используется для хранения данных профилирования находится в блоке комментариев в верхней части PHP файлов каталога в xhprof_lib/utils/Db . Используйте файл который подходит для сервера базы данных в вашей среде, чтобы создать эту базу данных таблицы, а затем добавить учетные данные для доступа к нему, файл XHGui config.php .

Если ваш веб-сервер не запущен на вашем локальном компьютере, не забудьте добавить IP-адрес локальной машины на $ controlIPs переменной в файле XHGui config.php, в противном случае вы получите сообщение об ошибке «Вы не должны разрешать просмотр этой страницы!»

Как-только все это на месте, XHGui должен загружаться.

xhprof в браузере

Для получения дополнительной информации о других параметрах настройки, предлагаемых XHGui,  см. в блоге PHP Advent  связаны в нижней части файла INSTALL.

Если вы работаете в среде разработки XHGui, одно место, где вы можете незначительно отклониться от инструкций в директивах для настройки auto_prepend_file конфигурации настройки PHP.  По словам руководства PHP , этот параметр настраивается в каталоге и означает, что вы можете его использовать. Htaccess файл вместо того, чтобы изменять конфигурацию виртуального хоста и отказов вашего веб-сервера, если ваше приложение имеет центральную конечную точку для обслуживания запросов. Пример этого показан ниже.



php_value auto_prepend_file "../../xhprof/external/header.php"


Этот параметр запускает указанный файл PHP перед любым файлом PHP. Данный файл позволяет сбор данных профилирования перед кодом для профилирования запускает и устанавливает, выключение функции  для хранения данных, только код завершения его исполнения.

Профилирование приложения

Для этой статьи,  пример приложения , предназначен с использованием Zend Framework 2 он используется в качестве субъекта профилирования. выше Файл .htaccess находится в общественном каталоге, приложения, который настроен в качестве корневого главного документа. Чтобы включить профилирование для конкретного URL, добавьте _profile = 1 , чтобы были строки запроса. Например, среда, используемая в этой статье использует имя хоста zf2.local, делая URL для доступа к приложению с профилированием http://zf2.local/?_profile=1. Это позволит установить куки, а затем перенаправить обратно в приложение с переменной запроса, с куки на месте, вам не нужно будет изменять строку запроса, включить профилирование для последующих запросов.

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

Нажмите на метку, перечисленные для запуска, и XHGui будет отображать подробные данные страницы, собранные в течение этого прохода. В таблице в левом верхнем углу отображаются агрегированные статистические данные, такие как общее время выполнения, использование памяти, и количество вызовов функций. В правом верхнем углу показывает таблицы GET, POST, куки и данные, а также круговую диаграмму подробно дорогих вызовов функций, сделанные в ходе запроса.

Прокрутите вниз и вы увидите сетку списка данных функций и их соответствующие статистические данные. Если вы профилировали для выполнения, сосредоточитесь на метках “Exclusive Wall Time” and “Call Count.” Для заметки, посмотрите на столбцах статистику “Exclusive Memory Usage” и “Exclusive Peak Memory”. Нажмите на любое сетки столбца, чтобы отсортировать данные сетки по этому столбцу. Нажмите на индивидуальное имя функции, чтобы просмотреть страницу с деталями которая включает в себя статистические данные, которые функция, так же как и его родитель функций (то есть функций, которые называют) и дочерней функций (то есть функций, которые она называет).

Сравнение работы профилирования

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

В XHGui, в сетке данных для профилирования трассы, каждая серия имеет значение хэш-функции показаны под его метку. Выберите один из двух входов, чтобы сравнить и скопировать его хэш-значение. Нажмите на метку другой перспективы чтобы довести свою страницу с деталями. Наконец, в нижней части таблицы данных в верхнем левом углу, введите хэш-значение в текстовом поле “Perform Delta” и нажмите кнопку «Delta» рядом с ним.

Это отображает страницу, где перспектива, для которой вы вошли в хэш-значение с надписью «Run Two» и баллотироваться на котором вы рассматривали подробно страница с надписью «Run One.» Как подробно странице, он отображает как сводную статистику и статистику по вызову функции. Эти статистические данные вызова функции вычисляются путем вычитания тех, для запуска одной из тех, для запуска двух. Например, “Wall Time” значение столбца для функции main() строки в таблице функции статистики соответствует разности значений “Incl. Wall Time” ячейки для запуска двух и запускать одну в агрегированной таблице статистики.

Статистика таблицы XHProf

Вполне возможно, что вы можете профилировать приложение в два раза без внесения каких-либо изменений и увидеть существенную разницу в этих двух профилях. Одной из возможных причин этого является то, что PHP поддерживает свой собственный кэш статистика файловой системы поиска для повышения производительности. Чтобы смягчить эту разницу в xhprof профилирования работает, добавим вызов функции clearstatcache в верхней части внешнего / header.php в вашей XHGui установки.

Просмотр Callgraphs

Еще одна особенность предлагаемых XHGui является генерация callgraphs, ориентированных графов , которые показывают, вызовы между функциями и визуально выделит вызовов функций, которые занимают большое количество времени выполнения. Graphviz  утилиты для этого XHGui. Ниже приведена команда для установки пакетов на Debian-based системы:



sudo apt-get install graphviz


Обратите внимание, что вы также должны раскомментировать блок, который выглядит, как показано ниже в XHGui файл config.php, либо XHGui вернется, а не интуитивными сообщением об ошибке вместо CallGraph. Благодаря  блогу Лорна Джейн Митчелл  указывают на это.



<!--?php <br ?-->//These are good for linux and its derivatives.
$_xhprof['dot_binary']  = '/usr/bin/dot';
$_xhprof['dot_tempdir'] = '/tmp';
$_xhprof['dot_errfile'] = '/tmp/xh_dot.err';


 

В верхней части страницы сведений для отдельного пробега или разница между двумя запусками, вы найдете ссылку “View Callgraph”. При нажатии она будет генерировать графу вызовов похожих на то, как показано на снимке. Профилирование может занять некоторое время для профильной работает с большим количеством функций вызовов. Вы также можете нажать на отдельные имена функции и нажмите кнопку “View Callgraph” ссылку на страницу с деталями просмотра CallGraph, характерные для этой функции.

CallGraph

Заключение

Я надеюсь, что вам понравился этот обзор функциональных возможностей, которые предлагает XHProf и XHGui при условии что вы понимаете значения эффективных инструментов профилирования. В то время как слой приложений может оказаться редкой причиной узких мест в производительности, теперь вы знаете, всё необходимое, чтобы изолировать причины недлинных запросов, чтобы предпринять дальнейшие шаги по их устранению.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


+ 4 = 5

Можно использовать следующие HTML -теги и атрибуты: <a href= http://pixelcom.crimea.ua/"" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>