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

维护者

详细信息

github.com/pshentsoff/xhgui

源代码

安装: 3

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 342

语言:JavaScript

0.10.1 2020-06-15 08:57 UTC

This package is auto-updated.

Last update: 2024-09-15 19:29:18 UTC


README

基于MongoDB构建的XHProf数据的图形界面。

此工具需要安装XHProf或其分支之一UprofilerTideways。XHProf是一个PHP扩展,用于记录和提供配置数据。XHGui(此工具)将此信息保存到MongoDB中,并提供一个方便的GUI来操作它。

Build Status Scrutinizer Code Quality Code Coverage

系统要求

XHGui有以下要求

  • PHP版本5.6至7.3。
  • MongoDB扩展 MongoDB PHP驱动程序。XHGui需要版本1.3.0或更高。
  • MongoDB MongoDB自身。XHGui需要版本2.2.0或更高。
  • 以下之一XHProfUprofilerTideways用于实际配置数据。
  • dom 如果您正在运行测试,您将需要DOM扩展(这是PHPUnit的依赖项)。

从源安装

  1. 从GitHub克隆或下载xhgui

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

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

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

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

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

  6. (可选,但推荐) 向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 } )
    
  7. 运行XHGui的安装脚本。安装脚本下载composer并使用它来安装XHGui的依赖项。

    cd path/to/xhgui
    php install.php
  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或直接打开https://:8142

  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 已经为正确的 DocumentRoot 设置了 FileInfo 指令。

    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 文件来启用剩余的 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_URIargv 值。

配置忽略的函数

你可以使用 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

在此特此授予任何获得此软件和相关文档副本(“软件”)的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许软件提供方进行上述操作,但受以下条件约束

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

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