XHProf 分析数据的图形界面,可以将结果存储在 MongoDB 或 PDO 数据库中。
对应用程序进行分析,并将分析数据传输到 XHGui,XHGui 获取该信息,将其保存在 MongoDB(或 PDO 数据库)中,并提供一个方便的 GUI 来使用它。
该项目是用于显示分析结果的 GUI,要分析您的应用程序,请使用特定的最小库:
XHGui 有以下要求:
如果您需要决定使用哪个后端,您可以检查兼容性矩阵每个后端实现或缺少哪些功能。
默认安装使用 MongoDB 数据库。大多数文档都涉及 MongoDB。
pecl install mongodb
XHGui 需要版本 1.3.0 或更高版本。任何驱动程序和随附的数据库:
注意:PDO 可能不支持 XHGui 的所有功能,请参阅#320。
从 GitHub 克隆或下载xhgui
。
将您的网络服务器指向webroot
目录。
设置cache
目录的权限以允许网络服务器创建文件。如果你懒的话, 0777
也可以。
以下命令更改cache
目录的权限:
chmod -R 0777 cache
启动 MongoDB 实例。 XHGui 使用 MongoDB 实例来存储分析数据。
如果您的 MongoDB 设置使用身份验证,或者未在默认端口和本地主机上运行,请更新 XHGui 的config/config.php
以便 XHGui 可以连接到您的mongod
实例。
(可选,但推荐)向 MongoDB 添加索引以提高性能。
XHGui 将分析信息存储在 MongoDB 中xhprof
数据库的results
集合中。添加索引可以提高性能,让您更快地导航页面。
要添加索引,请从命令提示符打开mongo
shell。然后,使用MongoDB的db.collection.ensureIndex()
方法添加索引,如下所示:
$ 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 安装依赖项
composer install --no-dev
设置您的网络服务器。下面的配置部分描述了如何为 nginx 和 apache 设置重写规则。
此设置使用 docker-compose 来编排 docker 容器。
从 GitHub 克隆或下载xhgui
。
启动容器: docker-compose up -d
打开浏览器 http://xhgui.127.0.0.1.xip.io:8142 或 http://localhost:8142 或在 Terminal composer open
中输入
要自定义 xhgui,请将config/config.default.php
复制到config/config.php
并编辑该文件。
要自定义 docker-compose,请将docker-compose.yml
复制到docker-compose.override.yml
并编辑该文件。
XHGui 更喜欢启用 URL 重写,但在没有它的情况下也能工作。对于 Apache,您可以执行以下操作来启用 URL 重写:
确保允许 .htaccess 覆盖,并且 AllowOverride 已为正确的 DocumentRoot 设置了指令 FileInfo。
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 包。
您可以使用该包从 Web 应用程序或 CLI 脚本收集数据。
然后,该数据被推送到 XHGui 数据库中,可以使用 XHGui 应用程序查看。
请求结束时分析完成后, php-profiler
包可以将数据直接提交到 XHGui 实例。
如果应用程序无法直接连接到 XHGui 实例,该包提供了将分析数据捕获到文件中的解决方案,您可以稍后使用导入脚本导入该文件。
警告:导入同一文件两次将创建重复的配置文件。
磁盘使用量可能会快速增长,尤其是在分析具有大型代码库或使用较大框架的应用程序时。
为了控制增长,可以通过创建 TTL 索引将 MongoDB 配置为在分析文档达到一定期限后自动删除它们。
确定配置文件的最大期限(以秒为单位):您可能希望在开发(您配置所有内容)中选择比生产(您仅配置部分文档)更低的值。以下命令指示 Mongo 删除超过 5 天(432000 秒)的文档。
$ mongo
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )
XHGui 瀑布显示的目标是认识到并发请求可以相互影响。并发数据库请求、CPU 密集型活动甚至会话文件锁定都可能变得相关。对于 Ajax 密集型应用程序,理解页面构建比单次加载要复杂得多:希望瀑布可以提供帮助。请记住,如果您只是分析请求的样本,瀑布会给您充满不礼貌的谎言。
一些注意事项:
request_ts_micro
值的存储,因为二级粒度不适用于瀑布。适用于监控服务运行状况的 Prometheus 指标公开在/metrics
上。 (目前仅当使用 PDO 进行存储时才有效。)
特征 | MongoDB | 磷酸二氢钾 |
---|---|---|
普罗米修斯出口商 | 第305章 | |
搜索者::最新() | ||
搜索器::查询() | 第384章 | |
搜索者::get() | ||
搜索者::getForUrl() | 第436章 | |
搜索者::getPercentileForUrl() | 第436章 | |
搜索者::getAvgsForUrl() | 第384章 | |
搜索者::getAll(排序) | 第436章 | |
搜索者::getAll(方向) | 第436章 | |
搜索者::删除() | ||
搜索器::截断() | ||
搜索者::saveWatch() | 第435章 | |
搜索者::getAllWatches() | 第435章 | |
搜索者::truncateWatches() | 第435章 | |
搜索者::统计数据() | 第305章 | |
搜索者::getAllServerNames() | 第460章 |
请参阅版本以获取变更日志和版本信息。
版权所有 (c) 2013 马克·斯托里 (Mark Story) 和保罗·赖因海默 (Paul Reinheimer)
特此免费授予获得本软件和相关文档文件(“软件”)副本的任何人不受限制地使用本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或销售软件的副本,并允许向其提供软件的人员这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有者均不对因本软件或本软件中的使用或其他交易而产生或与之相关的任何索赔、损害或其他责任负责,无论是合同、侵权行为还是其他行为。软件。