赵申托夫 / xhgui
一个基于Web的界面,用于查看XHProf收集的配置数据。
Requires
- php: ^5.6 || ^7.0
- pimple/pimple: ^1.0.2
- pshentsoff/xhgui-collector: ^1.8.1
- slim/slim: ^2.6.3
- slim/views: ^0.1.0
- twig/twig: ~1.17
Requires (Dev)
- alcaeus/mongo-php-adapter: ^1.1
- phpunit/phpunit: ^5.7.27 | ^6.5.13
Suggests
- ext-mongo: Mongo is needed to store profiler results for PHP < 7.
- ext-mongodb: Mongo is needed to store profiler results for PHP > 7.
- ext-uprofiler: You need to install either xhprof or uprofiler to use XHGui.
- ext-xhprof: You need to install either xhprof or uprofiler to use XHGui.
- alcaeus/mongo-php-adapter: Mongo PHP Adapter is required for PHP >7 (when using ext-mongodb)
This package is auto-updated.
Last update: 2024-09-15 19:29:18 UTC
README
基于MongoDB构建的XHProf数据的图形界面。
此工具需要安装XHProf或其分支之一Uprofiler、Tideways。XHProf是一个PHP扩展,用于记录和提供配置数据。XHGui(此工具)将此信息保存到MongoDB中,并提供一个方便的GUI来操作它。
系统要求
XHGui有以下要求
- PHP版本5.6至7.3。
- MongoDB扩展 MongoDB PHP驱动程序。XHGui需要版本1.3.0或更高。
- MongoDB MongoDB自身。XHGui需要版本2.2.0或更高。
- 以下之一XHProf、Uprofiler或Tideways用于实际配置数据。
- dom 如果您正在运行测试,您将需要DOM扩展(这是PHPUnit的依赖项)。
从源安装
-
从GitHub克隆或下载
xhgui
。 -
将您的Web服务器指向
webroot
目录。 -
设置
cache
目录的权限,允许Web服务器创建文件。如果您懒惰,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 } )
-
运行XHGui的安装脚本。安装脚本下载composer并使用它来安装XHGui的依赖项。
cd path/to/xhgui php install.php
-
设置您的Web服务器。下面的配置部分描述了如何为nginx和apache设置重写规则。
使用Docker安装
此设置使用docker-compose来编排Docker容器。
-
从GitHub克隆或下载
xhgui
。 -
启动容器:
docker-compose up -d
-
在浏览器中打开http://xhgui.127.0.0.1.xip.io:8142或直接打开https://:8142
-
要自定义xhgui,将
config/config.default.php
复制到config/config.php
并编辑该文件。 -
要自定义docker-compose,将
docker-compose.yml
复制到docker-compose.override.yml
并编辑该文件。
配置
配置Web服务器重写规则
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
文件来启用剩余的 rewrite 规则。
对于 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; } }
配置 XHGui 性能分析率
安装 XHGui 后,你可能想改变对主机应用程序的性能分析频率。profiler.enable
配置选项允许你提供一个回调函数,该函数指定要分析哪些请求。默认情况下,XHGui 分析 100 个请求中的 1 个。
以下示例配置了 XHGui 只分析来自特定 URL 路径的请求
以下示例配置了 XHGui 分析 100 个请求中的 1 个,但不包括具有 /blog
URL 路径的请求
// In config/config.php return array( // Other config 'profiler.enable' => function() { $url = $_SERVER['REQUEST_URI']; if (strpos($url, '/blog') === 0) { return false; } return rand(1, 100) === 42; } );
相比之下,以下示例配置了 XHGui 分析 所有 请求
// In config/config.php return array( // Other config 'profiler.enable' => function() { return true; } );
配置 '简单' URL 创建
XHGui 为每个收集到的配置生成 '简单' URL。这些 URL 用于生成 URL 视图上使用的聚合数据。由于不同的应用程序对 URL 映射到逻辑代码块块的要求不同,profile.simple_url
配置选项允许你指定生成简单 URL 的逻辑。默认情况下,所有查询字符串中的数值都会被删除。
// In config/config.php return array( // Other config 'profile.simple_url' => function($url) { // Your code goes here. } );
URL 参数是 REQUEST_URI
或 argv
值。
配置忽略的函数
你可以使用 profiler.options
配置值来设置分析器扩展的附加选项。当你想从分析器数据中排除特定函数时,这很有用。
// In config/config.php return array( //Other config 'profiler.options' => [ 'ignored_functions' => ['call_user_func', 'call_user_func_array'] ] );
此外,如果你不想分析所有 PHP 内置函数,你可以使用 profiler.skip_built_in
选项。
分析 Web 请求或 CLI 脚本
使用 xhgui-collector,你可以从你的 Web 应用程序和 CLI 脚本中收集数据。然后,这些数据会被推送到 xhgui 的数据库中,你可以使用此应用程序查看这些数据。
保存和导入配置文件
如果你的站点无法直接连接到你的 MongoDB 实例,你可以选择将数据保存到临时文件,以便稍后导入到 XHGui 的 MongoDB 数据库中。
要配置 XHGui 将数据保存到临时文件,请将 save.handler
设置更改为 file
,并使用 save.handler.filename
定义文件的路径。
要导入已保存的文件到 MongoDB,请使用 XHGui 提供的 external/import.php
脚本。
注意文件锁定:根据你的工作负载,你可能需要更改 save.handler.filename
文件路径,以避免导入期间的文件锁定。
以下展示了如何使用 external/import.php
php external/import.php -f /path/to/file
警告:导入相同的文件两次会在 MongoDB 中加载两倍运行数据,导致配置文件重复
限制 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 requests :)
使用Tideways扩展
XHProf PHP扩展与PHP7.0+不兼容。相反,你需要使用tideways_xhprof扩展。
安装后,你可以使用以下配置数据
[tideways_xhprof] extension="/path/to/tideways/tideways_xhprof.so"
版本/变更日志
查看版本以获取变更日志和发布信息。
许可
版权所有 (c) 2013 Mark Story & Paul Reinheimer
在此特此授予任何获得此软件和相关文档副本(“软件”)的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许软件提供方进行上述操作,但受以下条件约束
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他原因,无论此类责任是否源于、源于或与软件或软件的使用或其他交易有关。