大略来说,XHProf 便是能为我们网络很多程序去得时的系统状态,并且它自带一套在线图表工具,能够为我们供应详尽的图表信息。
安装直接在 PECL 下载安装扩展包即可。和其它的扩展安装并没有什么两样,这个扩展一贯在更新掩护状态中,以是对付 PHP7 版本都是完美支持的。
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS|XHPROF_FLAGS_CPU|XHPROF_FLAGS_MEMORY);//xhprof_enable(XHPROF_FLAGS_CPU|XHPROF_FLAGS_MEMORY);//xhprof_enable(XHPROF_FLAGS_MEMORY);//xhprof_enable();for($i=0;$i<=1000;$i++){$a=$i$i;}functiontest_application(){for($i=0;$i<=1000;$i++){$a=$i$i;}}test_application();$xhprof_data=xhprof_disable();print_r($xhprof_data);//Array//(//[main()==>test_application]=>Array//(//[ct]=>1//[wt]=>16//[cpu]=>21//[mu]=>848//[pmu]=>0//)//[main()]=>Array//(//[ct]=>1//[wt]=>115//[cpu]=>115//[mu]=>1416//[pmu]=>0//)//)
利用 xhprof_enable() 启用剖析器,它的参数是几个常量,大概的意思便是显示 CPU 信息、内存信息等,如果没有参数的话则只会返回 ct 、 wt 这两个参数。

调用 xhprof_disable() 结束剖析并返回剖析结果,返回值的内容包括 main 主函数的运行情形,也便是我们当前页面测试代码的情形。还有调用的函数 test_application() 函数的性能情形。详细内容为:
ct:调用次数wt:等待运行时长,毫秒cpu:cpu 运行时长,毫秒mu:内存利用,字节pmu:内存利用峰值没错,便是这么大略的内容。通过两个函数的调用我们就能看到当前脚本程序的运行状态,占用了多少内存、耗费了多少 cpu 时长。当然,更方便的是,它还可以通过 web 页面显示更为详细的信息。
web 查当作果报告首先,我们须要做一些准备事情。一是要安装一个 graphviz 用于图形绘制,二是修正 php.ini 文件的结果存放目录,三是拷贝源码中的剖析器代码并修正一下我们之前的测试代码。
yuminstallgraphviz
CentOS 系统中我们直策应用 yum 就可以安装 graphviz 。然后我们在 php.ini 文件中为 xhprof 指定一下输出目录。
xhprof.output_dir=/tmp
接下来,我们须要将源码文件中的 xhporf_html 目录和 xhporf_lib 目录拷贝出来放到项目文件下。然后修正代码来保存性能剖析的结果。
//.....上面的代码$xhprof_data=xhprof_disable();require'xhprof_lib/utils/xhprof_lib.php';require'xhprof_lib/utils/xhprof_runs.php';$xhprofRuns=newXHProfRuns_Default();$runId=$xhprofRuns->save_run($xhprof_data,'xhprof_test');echo'http://192.168.56.102/index.php?run='.$runId.'&source=xhprof_test';
然后我们须要在 xhporf_html 搭起做事器,在这里我就用大略的 php -S 命令运行起来。
cdxhprof_html/php-S0.0.0.0:80
末了用上面输出的链接来访问这个页面,就可以看到干系的信息了。
总结本日的测试代码只是大略的学习入门了一下 xhporf 的利用。实在这个扩展以及这套剖析工具是可以集成到我们真实项目的框架中的。这样,在测试环境我们就可以很好地监控当出路序的运行状态。不过,还是不太建议放在正式环境中利用,毕竟 Debug 或者这种性能剖析的东西都不要对外,在正式环境,我们可以在命令行进行剖析调优。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E7%AE%80%E5%8D%95%E5%AD%A6%E4%B9%A0PHP%E4%B8%AD%E7%9A%84%E5%B1%82%E6%AC%A1%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90%E5%99%A8.php
参考文档:
https://www.php.net/manual/zh/book.xhprof.php
https://segmentfault.com/a/1190000003509917