Графический интерфейс для данных профилирования XHProf, который может сохранять результаты в базе данных MongoDB или PDO.
Приложение профилируется, и данные профилирования передаются в XHGui, который берет эту информацию, сохраняет ее в MongoDB (или базе данных PDO) и предоставляет удобный графический интерфейс для работы с ней.
Этот проект представляет собой графический интерфейс для отображения результатов профилирования. Для профилирования вашего приложения используйте определенную минимальную библиотеку:
XHGui имеет следующие требования:
Если вам нужно решить, какой бэкэнд использовать, вы можете проверить матрицу совместимости, какие функции реализованы или отсутствуют для каждого бэкэнда.
При установке по умолчанию используется база данных MongoDB. Большая часть документации говорит о MongoDB.
pecl install mongodb
XHGui требует версии 1.3.0 или более поздней.Любой из драйверов и сопутствующая база данных:
ПРИМЕЧАНИЕ. PDO может не поддерживать все функции XHGui, см. #320.
Клонируйте или загрузите xhgui
с GitHub.
Укажите на своем веб-сервере корневой каталог webroot
.
Установите разрешения для каталога cache
, чтобы веб-сервер мог создавать файлы. Если ленив, 0777
подойдет.
Следующая команда изменяет разрешения для каталога cache
:
chmod -R 0777 cache
Запустите экземпляр MongoDB. XHGui использует экземпляр MongoDB для хранения данных профилирования.
Если ваша установка MongoDB использует аутентификацию или не работает на порте по умолчанию и локальном хосте, обновите config/config.php
XHGui, чтобы XHGui мог подключаться к вашему экземпляру mongod
.
( Необязательно , но рекомендуется) Добавьте индексы в MongoDB, чтобы повысить производительность.
XHGui хранит информацию о профилировании в коллекции results
в базе данных xhprof
в MongoDB. Добавление индексов повышает производительность, позволяя быстрее перемещаться по страницам.
Чтобы добавить индекс, откройте оболочку mongo
из командной строки. Затем используйте метод db.collection.ensureIndex()
MongoDB, чтобы добавить индексы, как показано ниже:
$ mongo
> use xhprof
> db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } )
> db.results.ensureIndex( { 'profile.main().wt' : -1 } )
> db.results.ensureIndex( { 'profile.main().mu' : -1 } )
> db.results.ensureIndex( { 'profile.main().cpu' : -1 } )
> db.results.ensureIndex( { 'meta.url' : 1 } )
> db.results.ensureIndex( { 'meta.simple_url' : 1 } )
> db.results.ensureIndex( { 'meta.SERVER.SERVER_NAME' : 1 } )
Установите зависимости с помощью композитора
composer install --no-dev
Настройте свой веб-сервер. В разделе «Конфигурация» ниже описано, как настроить правила перезаписи как для nginx, так и для Apache.
В этой настройке используется docker-compose для оркестрации контейнеров докеров.
Клонируйте или загрузите xhgui
с GitHub.
Запустите контейнеры: docker-compose up -d
Откройте браузер по адресу http://xhgui.127.0.0.1.xip.io:8142 или просто http://localhost:8142 или введите в терминале composer open
Чтобы настроить xhgui, скопируйте config/config.default.php
в config/config.php
и отредактируйте этот файл.
Чтобы настроить docker-compose, скопируйте docker-compose.yml
в docker-compose.override.yml
и отредактируйте этот файл.
XHGui предпочитает включать перезапись URL-адресов, но будет работать и без нее. В Apache вы можете сделать следующее, чтобы включить перезапись URL-адресов:
Убедитесь, что разрешено переопределение .htaccess и что директива FileInfo для параметра AllowOverride установлена для правильного DocumentRoot.
Пример конфигурации для Apache 2.4:
< Directory /var/www/xhgui/>
Options Indexes FollowSymLinks
AllowOverride FileInfo
Require all granted
</ Directory >
Убедитесь, что вы правильно загружаете mod_rewrite. Вы должны увидеть что-то вроде:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
XHGui поставляется с файлом .htaccess
для включения остальных правил перезаписи.
Для nginx и fast-cgi вы можете начать с следующего фрагмента:
server {
listen 80 ;
server_name example.com;
# root directive should be global
root /var/www/example.com/public/xhgui/webroot/;
index index.php;
location / {
try_files $uri $uri / /index.php? $args ;
}
location ~ .php$ {
try_files $uri =404 ;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ;
}
}
Поддерживаемый способ профилирования приложения — использование пакета perftools/php-profiler.
Вы можете использовать этот пакет для сбора данных из вашего веб-приложения или сценария CLI.
Затем эти данные помещаются в базу данных XHGui, где их можно просмотреть с помощью приложения XHGui.
Пакет php-profiler
предлагает отправку данных непосредственно в экземпляр XHGui после завершения профилирования в конце запроса.
Если приложение не может напрямую подключиться к экземпляру XHGui, пакет предлагает решение для записи данных профилирования в файл, который вы можете импортировать позже с помощью сценария импорта.
Внимание : двойной импорт одного и того же файла приведет к созданию дубликатов профилей.
Использование диска может быстро расти, особенно при профилировании приложений с большой базой кода или использующих более крупные платформы.
Чтобы контролировать рост, настройте MongoDB на автоматическое удаление документов профилирования по достижении ими определенного возраста, создав индекс TTL.
Определите максимальный возраст документа профиля в секундах: возможно, вы захотите выбрать более низкое значение в разработке (где профилируется все), чем в рабочей версии (где профилируется только выборка документов). Следующая команда предписывает Mongo удалить документы старше 5 дней (432 000 секунд).
$ mongo
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )
Цель каскадного отображения XHGui — осознать, что одновременные запросы могут влиять друг на друга. Параллельные запросы к базе данных, операции с интенсивным использованием ЦП и даже блокировки файлов сеансов могут стать актуальными. В приложении с большим количеством Ajax понять сборку страницы гораздо сложнее, чем одну загрузку: надеюсь, водопад сможет помочь. Помните: если вы составляете только выборку запросов, водопад наполнит вас невежливой ложью.
Некоторые примечания:
request_ts_micro
, поскольку детализация второго уровня не очень хорошо работает с водопадами. Метрики Prometheus, подходящие для мониторинга работоспособности сервисов, доступны в /metrics
. (В настоящее время это работает только при использовании PDO для хранения.)
Особенность | МонгоБД | ПДО |
---|---|---|
Экспортер Прометея | #305 | |
Искатель::последний() | ||
Искатель::запрос() | #384 | |
Искатель::get() | ||
Искатель::getForUrl() | #436 | |
Искатель::getPercentileForUrl() | #436 | |
Искатель::getAvgsForUrl() | #384 | |
Поисковик::getAll(сортировка) | #436 | |
Искатель::getAll(направление) | #436 | |
Искатель::удалить() | ||
Искатель::truncate() | ||
Искатель::saveWatch() | #435 | |
Искатель::getAllWatches() | #435 | |
Искатель::truncateWatches() | #435 | |
Поисковик::статистика() | #305 | |
Искатель::getAllServerNames() | #460 |
См. выпуски для журналов изменений и информации о выпуске.
Авторские права (c) 2013 г. Марк Стори и Пол Рейнхаймер
Настоящим бесплатно любому лицу, получившему копию этого программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), предоставляется разрешение на работу с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение. публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставлено Программное обеспечение, делать это при соблюдении следующих условий:
Вышеупомянутое уведомление об авторских правах и настоящее уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ В ДЕЙСТВИЯХ ПО КОНТРАКТУ, ПРАВОНАРУШЕНИЮ ИЛИ ДРУГИМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ОТ, ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ, ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.