perftools/xhgui

基于Web的界面,用于查看XHProf收集的配置数据

安装: 111 119

依赖关系: 2

建议者: 1

安全性: 0

星星: 1 646

关注者: 68

分支: 340

开放问题: 28

语言:JavaScript

0.22.1 2024-02-25 12:16 UTC

README

XHProf配置数据的图形界面,可以将结果存储在MongoDB或PDO数据库中。

应用程序会被配置,配置数据会被传输到XHGui,XHGui将此信息保存到MongoDB(或PDO数据库),并提供一个方便的GUI来处理它。

此项目是用于显示配置结果的GUI,要配置您的应用程序,请使用特定的最小库

Build Status Scrutinizer Code Quality Code Coverage

系统需求

XHGui有以下需求

  • 已知工作:PHP >= 7.2, 8.0, 8.1
  • 如果使用MongoDB存储,请参阅MongoDB要求
  • 如果使用PDO存储,请参阅PDO要求
  • 要配置应用程序,需要PHP配置扩展之一。请参阅配置Web请求或CLI脚本。扩展不是运行XHGui本身所必需的。

如果您需要决定使用哪个后端,可以检查兼容性矩阵,了解每个后端实现了哪些功能或缺少哪些功能。

MongoDB

默认安装使用MongoDB数据库。大多数文档都讲述了MongoDB。

  • MongoDB扩展 MongoDB PHP驱动:pecl install mongodb XHGui需要版本1.3.0或更高。
  • MongoDB MongoDB自身。XHGui需要版本3.2或更高。

PDO

  • PDO PHP扩展

任何驱动程序和相应的数据库

注意:PDO可能不支持XHGui的所有功能,请参阅#320

从源代码安装

  1. 从GitHub克隆或下载xhgui

  2. 将您的web服务器指向webroot目录。

  3. 设置cache目录的权限,允许web服务器创建文件。如果您懒散,0777将有效。

    以下命令更改了cache目录的权限

    chmod -R 0777 cache
  4. 启动MongoDB实例。XHGui使用MongoDB实例来存储配置数据。

  5. 如果您的MongoDB配置使用身份验证,或不在默认端口和localhost上运行,请更新XHGui的config/config.php,以便XHGui可以连接到您的mongod实例。

  6. (可选,但推荐) 向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 } )
    
  7. 使用composer安装依赖项

    composer install --no-dev
  8. 设置您的web服务器。下面的配置部分描述了如何为nginx和apache设置重写规则。

使用Docker安装

此设置使用docker-compose来编排Docker容器。

  1. 从GitHub克隆或下载xhgui

  2. 启动容器: docker-compose up -d

  3. 在浏览器中打开 http://xhgui.127.0.0.1.xip.io:8142 或直接 http://localhost:8142,或在终端输入 composer open

  4. 要自定义 xhgui,将 config/config.default.php 复制到 config/config.php 并编辑该文件。

  5. 要自定义 docker-compose,将 docker-compose.yml 复制到 docker-compose.override.yml 并编辑该文件。

配置

配置 Web 服务器重写规则

XHGui 倾向于启用 URL 重写,但即使不启用也可以正常工作。对于 Apache,你可以按照以下步骤启用 URL 重写

  1. 确保允许 .htaccess 覆盖,并且 AllowOverride 已将指令 FileInfo 设置为正确的 DocumentRoot。

    Apache 2.4 的示例配置

    <Directory /var/www/xhgui/>
        Options Indexes FollowSymLinks
        AllowOverride FileInfo
        Require all granted
    </Directory>
  2. 确保正确加载了 mod_rewrite。你应该会看到类似

    LoadModule rewrite_module libexec/apache2/mod_rewrite.so
  3. 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

本协议授予任何获得本软件及其相关文档副本(统称为“软件”)的个人免费使用软件的权利,不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供者提供软件的个人进行上述操作,前提是遵守以下条件:

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和无侵权性的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他原因,无论是否与软件或软件的使用或其他操作有关。