如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

相比较phptrace、xdebug,xhprof的功能更加强大,但是对于代码来说,它是侵入式的。其基本功能的基础是要对php源码进行修改,必须嵌入这个扩展的相关代码,才能实现其强大的功能。所以,这样来说,是不是方便大家使用,就仁者见仁智者见智了。

苏南大叔将简要介绍一下xhprof的使用,本文的写作环境是php5.6.31下的xhprof,至于php7.2.0b3下的xhprof,虽然编译成功。但是在实际运行中,还是有一定的概率导致502错误。所以,这里并没有采用这个环境。大家如果要在php7下面使用xhprof的话,就还需要三思而行。详细的中文介绍,可以点击这里查看:https://doc.php.sh/zh/book.xhprof.html

放置库文件

代码需要能够访问到这两个目录,xhprof_lib和xhprof_html。但是这两个目录是否放置于网站根目录,就不一定了。对于xhprof_lib来说,需要能够被include到。而xhprof_html,需要能够通过地址访问到。所以,如果你不会配置nginx或者apache,那么简单的把这两组文件复制到网站根目录下面,是最好的选择。
如何使用php代码分析工具xhprof - xhprof_000

如何使用php代码分析工具xhprof(图8-1)

对比sample.php埋点

官方源码里面有个examples/sample.php文件。
如何使用php代码分析工具xhprof - eg

如何使用php代码分析工具xhprof(图8-2)

对比官方源码里面的example.php。我们可以知道:埋点分为两部分。
一部分是放在php文件主代码之前,见下面。

//date_default_timezone_set("Asia/Hong_Kong");
include_once "./xhprof_lib/utils/xhprof_lib.php";
include_once "./xhprof_lib/utils/xhprof_runs.php";
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

一部分是放在php文件主代码结束之,见下面。

$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
//$run_id = $xhprof_runs->save_run($xhprof_data, str_replace(".", "_", basename(__FILE__)));

运行代码,写入日志

运行代码后,就会按着php.ini中的『xhprof.output_dir = /tmp/xhprof』的设定,写入日志文件。所以,请确保对应的文件夹权限。

如何使用php代码分析工具xhprof - log

如何使用php代码分析工具xhprof(图8-3)

查看分析

运行 http:///xhprof_html/ 即可查看相关结果。当然这个前提是,你已经成功放置了xhprof_lib和xhprof_html这两个文件夹。正常情况下,是这样的效果。
如何使用php代码分析工具xhprof - log_1

如何使用php代码分析工具xhprof(图8-4)

如何使用php代码分析工具xhprof - xhprof_001
如何使用php代码分析工具xhprof(图8-5)

如何使用php代码分析工具xhprof - xhprof_004
如何使用php代码分析工具xhprof(图8-6)

funciton name : 函数名
calls: 调用次数
Incl. Wall Time (microsec): 函数运行时间(包括子函数)
IWall%:函数运行时间(包括子函数)占比
Excl. Wall Time(microsec):函数运行时间(不包括子函数)
EWall%:函数运行时间(不包括子函数)

可能需要安装的组件

如果最后一步,查看图表失败的话。如下图所示:
如何使用php代码分析工具xhprof - xhprof_002

如何使用php代码分析工具xhprof(图8-7)

请安装graphviz即可。(centos下面是yum install)

brew install graphviz

如何使用php代码分析工具xhprof - xhprof_003

如何使用php代码分析工具xhprof(图8-8)

小小的进阶

苏南大叔说了,这种调用方式,对代码本身是有侵入性的。事实上不是太友好。那么进阶的操作就是,把上述两个注入点,用下面的形式改写成一个单独的文件。

//开启xhprof
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
//在程序结束后收集数据
register_shutdown_function(function() {
    $xhprof_data        = xhprof_disable();
    //让数据收集程序在后台运行
    if (function_exists('fastcgi_finish_request')) {
        fastcgi_finish_request();
    }
    //保存xhprof数据
    ...
});

然后利用php.ini的auto_prepend_file功能,来把这个文件自动注入到源码中。这个idea其实是相当不错的。几乎把代码的侵入性降到了最低点。

auto_prepend_file = /opt/inject.php

当然,也可以通过nginx修改php.ini。效果是差不多的。

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

基本的使用教程就是这样的,更多有关xhprof的中文介绍。可以点击这里查看,https://doc.php.sh/zh/book.xhprof.html 。苏南大叔编写的xhprof系列教程,可以点击这里查看。https://newsn.net/tag/xhprof/

  【php】秘籍文章入口,仅传授于有缘之人  php    xhprof

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

打赏任意金额,发送截图到邮箱 shang@newsn.net ,可以领取精选回馈如下(任选其一):
  • 《前端视频教程大礼包》一套
  • 《wordpress精选皮肤》一套
  • 《dedecms织梦精选模板》一套
感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!

岁月静好

关注互联网发展,关注苏南大叔的《程序如此灵动~》博客
本文章来自:程序如此灵动~
博客地址为:https://newsn.net/
原文地址为:https://newsn.net/say/xhprof-123.html
上一篇好文:php性能分析利器xhprof扩展安装(php7.2.0b3)
下一篇好文:html5的服务器端推送事件Server-Sent Events解析

如果您转载了本文章,出于某种原因,并没有注明作者或者出处。
在这里,苏南大叔也表示理解和支持。因为苏南大叔深深地明白:
您会在合适的时机,合适的地方,给本博客一个外链。对吧?
您若开心,便是安好!岁月静好,但愿世界和平,没有纷争~