乐趣区

关于php:简单学习PHP中的层次性能分析器

在 PHP 中,咱们须要进行调试的时候,个别都会应用 memory_get_usage() 看下内存的应用状况。但如果想看以后的脚本 CPU 的占用状况就没有什么现成的函数了。不过,PHP 也为咱们提供了一个扩大:XHProf,这是由 FaceBook 开源的一个扩大,它能够帮咱们看到以后脚本运行时的一些性能状况。

什么是 XHProf

XHProf 是一个轻量级的分层性能测量分析器。在数据收集阶段,它跟踪调用次数与测量数据,展现程序动静调用的弧线图。它在报告、前期解决阶段计算了独占的性能度量,例如运行通过的工夫、CPU 计算工夫和内存开销。函数性能报告能够由调用者和被调用者终止。在数据收集阶段 XHProf 通过调用图的循环来检测递归函数,通过赋予惟一的深度名称来防止递归调用的循环。

简略来说,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;}

function test_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 文件的后果寄存目录,三是拷贝源码中的分析器代码并批改一下咱们之前的测试代码。

yum install graphviz

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 = new XHProfRuns_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 命令运行起来。

cd xhprof_html/
php -S 0.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

===========

各自媒体平台均可搜寻【硬核项目经理】

退出移动版