PHP 性能分析工具 xhprof 安装与使用指南

沈知远
沈知远
发布时间:2026-10-13 | 4人浏览过
原创

xhprof 是 Facebook 开源的一款轻量级 PHP 性能分析工具,相比 Xdebug 具有更低的性能开销,甚至可直接应用于生产环境。它支持程序化开关控制 profiling,能够精确统计函数的调用次数、包含子函数与不包含子函数的 CPU/Wall Time 以及内存消耗。

安装 xhprof 扩展

首先下载并解压 xhprof 源码包,进入 extension 目录使用 phpize 生成配置文件后编译安装。

  1. 下载并解压:获取指定版本的 tar 包并解压缩,进入 extension 目录。

    wget http://pecl.php.net/get/xhprof-0.9.3.tgz
    tar zxf xhprof-0.9.3.tgz
    cd xhprof-0.9.3/extension
    
  2. 生成配置环境:执行 phpize 命令(路径通常为 /usr/bin/phpize),以便为后续编译准备环境。

  3. 编译与安装:根据实际环境配置 php-config 路径,执行 make 和 sudo make install 完成安装。

    ./configure --with-php-config=/usr/bin/php-config
    make
    sudo make install
    

    安装成功后,生成的扩展文件 xhprof.so 会被自动拷贝至 PHP 模块目录(如 /usr/lib64/php/modules,具体位置可通过 phpinfo() 查看)。

配置 php.ini

在 PHP 扩展目录下新建或编辑配置文件(例如 /etc/php.d/xhprof.ini),添加以下内容以启用扩展并指定日志保存路径:

extension=xhprof.so
xhprof.output_dir=/tmp/xhprof // xhprof 的分析数据存放目录

保存配置后,重启 Web 服务使更改生效:

sudo /etc/init.d/http restart
// 或者对于 Nginx + PHP-FPM:
sudo service php-fpm restart

确认 phpinfo() 页面中已出现 xhprof 相关信息,即表示安装成功。

在代码中接入性能监控

xhprof 提供了简单的 API,可在关键代码段前后包裹开启与停止监测的代码块。

第1步:开启监测

在需要分析的业务逻辑开始前调用 xhprof_enable()。

// 开启标准监测
xhprof_enable();

// 可选参数组合:
// xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); // 忽略内置函数
// xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); // 同时采集 CPU 和内存

第2步:业务代码执行

此处执行您的核心业务逻辑,例如数据库查询、复杂运算等。

第3步:停止监测并保存结果

调用 xhprof_disable() 获取原始数据,并通过封装好的类保存至磁盘。

$xhprof_data = xhprof_disable(); // 停止监测并返回数组
$xhprof_root = '/path/to/xhprof/install/dir'; // 本地安装 xhprof 的路径
include_once $xhprof_root . 'xhprof_lib/utils/xhprof_lib.php';
include_once $xhprof_root . 'xhprof_lib/utils/xhprof_runs.php';

$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "my_app");

// 输出访问链接,用于查看分析报告
echo '查看性能报告';

使用非侵入式方式自动注入

若不想修改业务代码,可利用 PHP 的自动加载特性或服务器环境变量实现全局监控。

  1. 创建注入脚本:新建一个文件(如 /opt/inject.php),内容如下:

    save_run($xhprof_data, 'global_inject');
    });
    
  2. 配置 PHP-FPM 自动加载:在 php.ini 中设置 auto_prepend_file。

    auto_prepend_file = /opt/inject.php
    
  3. 或者配置 Nginx:在 Nginx 对应的 server/location 块中设置 fastcgi_param。

    fastcgi_param PHP_VALUE "auto_prepend_file=/opt/inject.php";
    

解读与分析性能报告

将 xhprof 项目中的 xhprof_html 和 xhprof_lib 目录放置于 Web 服务器可访问的位置。访问生成的 URL 即可查看报表。

  • View Full Callgraph:点击此链接可生成可视化的调用关系图。若报错,请确保系统已安装依赖库:yum install -y graphviz graphviz-gd(CentOS)或 apt-get install graphviz(Ubuntu)。

理解报表中的关键字段有助于定位瓶颈:

  • Calls / Calls%:函数被调用的次数及其占比。
  • Excl. Wall Time (microsec):函数自身消耗的时间(不含子函数)。这是定位最耗时函数的核心指标。
  • Incl. Wall Time (microsec):包含所有子函数在内的总时间。
  • Excl. CPU / Incl. CPU:对应的 CPU 时间消耗情况。
  • MemUse / PeakMemUse:当前及峰值内存使用情况。

通常优先关注 Excl. Wall Time% 较高的函数,这代表该函数本身的代码执行效率较低,应作为优化重点。

以上就是 PHP 轻量级性能分析工具 xhprof 的安装与使用详细流程,更多关于 PHP 开发高效调试的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表