perftools / xhgui
基于Web的界面,用于查看XHProf收集的配置数据
Requires
- php: ^7.2 || ~8.0 || ~8.1
- ext-json: *
- alcaeus/mongo-php-adapter: ^1.1
- pimple/pimple: ^3.0
- slim/flash: ^0.4.0
- slim/slim: ^3.12
- slim/twig-view: ^2.5
- symfony/options-resolver: ^3.3
- twig/twig: ^1.26
Requires (Dev)
- glen/php-cs-fixer-config: ^0.3.0
- ocramius/lazy-property: ^1.0
- symfony/phpunit-bridge: ^5.2
Suggests
- ext-pdo: Required to pdo backend.
- 0.23.x-dev
- 0.22.x-dev
- 0.22.1
- 0.22.0
- 0.21.x-dev
- 0.21.4
- 0.21.3
- 0.21.2
- 0.21.1
- 0.21.0
- 0.20.x-dev
- 0.20.6
- 0.20.5
- 0.20.4
- 0.20.3
- 0.20.2
- 0.20.1
- 0.20.0
- 0.19.x-dev
- 0.19.2
- 0.19.1
- 0.19.0
- 0.18.x-dev
- 0.18.5
- 0.18.4
- 0.18.3
- 0.18.2
- 0.18.1
- 0.18.0
- 0.17.1
- 0.17.0
- 0.16.4
- 0.16.3
- 0.16.2
- 0.16.1
- 0.16.0
- 0.15.0
- 0.14.0
- 0.13.0
- 0.12.0
- 0.11.0
- 0.10.0
- 0.9.0
- 0.8.1
- 0.8.0
- dev-0.21.x-merge-up-into-0.22.x_pHI5ERR7
This package is auto-updated.
Last update: 2024-08-26 13:16:35 UTC
README
XHProf配置数据的图形界面,可以将结果存储在MongoDB或PDO数据库中。
应用程序会被配置,配置数据会被传输到XHGui,XHGui将此信息保存到MongoDB(或PDO数据库),并提供一个方便的GUI来处理它。
此项目是用于显示配置结果的GUI,要配置您的应用程序,请使用特定的最小库
系统需求
XHGui有以下需求
- 已知工作:PHP >= 7.2, 8.0, 8.1
- 如果使用MongoDB存储,请参阅MongoDB要求
- 如果使用PDO存储,请参阅PDO要求
- 要配置应用程序,需要PHP配置扩展之一。请参阅配置Web请求或CLI脚本。扩展不是运行XHGui本身所必需的。
如果您需要决定使用哪个后端,可以检查兼容性矩阵,了解每个后端实现了哪些功能或缺少哪些功能。
MongoDB
默认安装使用MongoDB数据库。大多数文档都讲述了MongoDB。
PDO
- PDO PHP扩展
任何驱动程序和相应的数据库
注意:PDO可能不支持XHGui的所有功能,请参阅#320。
从源代码安装
-
从GitHub克隆或下载
xhgui
。 -
将您的web服务器指向
webroot
目录。 -
设置
cache
目录的权限,允许web服务器创建文件。如果您懒散,0777
将有效。以下命令更改了
cache
目录的权限chmod -R 0777 cache
-
启动MongoDB实例。XHGui使用MongoDB实例来存储配置数据。
-
如果您的MongoDB配置使用身份验证,或不在默认端口和localhost上运行,请更新XHGui的
config/config.php
,以便XHGui可以连接到您的mongod
实例。 -
(可选,但推荐) 向MongoDB添加索引以提高性能。
XHGui将配置信息存储在MongoDB的
xhprof
数据库中的results
集合中。添加索引可以提高性能,让您更快地浏览页面。要添加索引,从命令提示符打开一个
mongo
外壳。然后,使用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
-
设置您的web服务器。下面的配置部分描述了如何为nginx和apache设置重写规则。
使用Docker安装
此设置使用docker-compose来编排Docker容器。
-
从GitHub克隆或下载
xhgui
。 -
启动容器:
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
并编辑该文件。
配置
配置 Web 服务器重写规则
XHGui 倾向于启用 URL 重写,但即使不启用也可以正常工作。对于 Apache,你可以按照以下步骤启用 URL 重写
-
确保允许 .htaccess 覆盖,并且 AllowOverride 已将指令 FileInfo 设置为正确的 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; } }
分析 Web 请求或 CLI 脚本
分析应用程序的推荐方法是使用 perftools/php-profiler 包。
你可以使用此包从你的 Web 应用程序或 CLI 脚本收集数据。
然后,将这些数据推送到 XHGui 数据库中,其中可以使用 XHGui 应用程序查看。
当分析完成且请求结束时,php-profiler
包提供了将数据直接提交给 XHGui 实例的功能。
如果应用程序不能直接连接到 XHGui 实例,该包提供了解决方案,将分析数据捕获到文件中,您可以使用 导入 脚本稍后导入。
警告:导入同一文件两次将创建重复的分析结果。
限制 MongoDB 磁盘使用
磁盘使用量可能会迅速增长,尤其是分析大型代码库或使用大型框架的应用程序时。
为了控制增长,通过创建一个 TTL 索引 来配置 MongoDB,以便自动删除达到一定年龄的分析文档。
确定最大分析文档年龄(以秒为单位):您可能希望在生产环境中选择比开发环境(在此环境中您分析一切)更低的值。以下命令指示 Mongo 删除超过 5 天(432000 秒)的文档。
$ mongo
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )
瀑布显示
XHGui 瀑布显示的目标是认识到并发请求可能会相互影响。并发数据库请求、CPU 密集型活动甚至对会话文件的锁定都可能变得相关。在 Ajax 重量级应用程序中,理解页面构建比单次加载要复杂得多:希望瀑布可以帮助。记住,如果您只分析请求样本,瀑布会向您提供不礼貌的谎言。
一些注意事项
- 可能需要在 MongoDB 上创建更多的索引以使其性能更佳。
- 瀑布显示引入了新的
request_ts_micro
值的存储,因为二级粒度在瀑布中工作不佳。 - 瀑布显示仍处于 alpha 阶段。
- 欢迎反馈和 pull 请求 :)
监控
Prometheus 指标适用于监控服务健康,在 /metrics
上公开。(目前仅在使用 PDO 作为存储时有效。)
兼容性矩阵
版本 / 更新日志
查看 版本 以获取更新日志和发布信息。
许可证
版权(c)2013 Mark Story & Paul Reinheimer
本协议授予任何获得本软件及其相关文档副本(统称为“软件”)的个人免费使用软件的权利,不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供者提供软件的个人进行上述操作,前提是遵守以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和无侵权性的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他原因,无论是否与软件或软件的使用或其他操作有关。