在PHP中,当我们需要调试的时候,我们通常会使用memory_get_usage()来查看内存使用情况。但是如果想查看当前脚本的CPU使用情况,没有现成的功能。不过PHP也为我们提供了一个扩展:XHProf,它是FaceBook开源的一个扩展,可以帮助我们查看当前脚本运行时的一些性能情况。什么是XHProfXHProf是一个轻量级的分层性能测量分析器。在数据收集阶段,它跟踪调用计数和测量,显示程序动态调用的弧形图。它在报告、后处理阶段计算独有的性能指标,例如经过时间、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;}functiontest_application(){for($i=0;$i<=1000;$i++){$a=$i*$i;}}test_application();$xhprof_data=xhprof_disable();print_r($xhprof_data);//数组//(//[main()==>test_application]=>数组//(//[ct]=>1//[wt]=>16//[cpu]=>21//[mu]=>848//[pmu]=>0//)//[main()]=>Array//(//[ct]=>1//[wt]=>115//[cpu]=>115//[mu]=>1416//[pmu]=>0//)//)使用xhprof_enable()启用profiler,它的参数是几个Constant,大致意思是显示CPU信息,内存信息等,如果没有参数,它只会返回ct和wt这两个参数。调用xhprof_disable()结束分析并返回分析结果。返回值的内容包括了main主函数的运行状态,也就是我们当前页面测试代码的状态。还有就是调用test_application()函数的函数的表现。具体内容是:ct:调用次数,wt:等待时间,毫秒cpu:cpu运行时间,毫秒mu:内存使用,bytepmu:内存使用峰值没错,就是这么简单的内容。通过调用这两个函数,我们可以看到当前脚本程序的运行状态,占用了多少内存,消耗了多少cpu时间。当然,更方便的是,它还可以通过网页展示更详细的信息。Web查看结果报告首先,我们需要做一些准备工作。一是安装一个graphviz进行图形绘制,二是修改php.ini文件的结果存放目录,三是复制源码中的analyzer代码,修改我们之前的测试代码。yuminstallgraphviz在CentOS系统中,我们可以直接使用yum安装graphviz。然后我们在php.ini文件中指定xhprof的输出目录。xhprof.output_dir=/tmp接下来我们需要将源文件中的xhporf_html目录和xhporf_lib目录复制到工程文件下。然后修改代码,保存性能分析的结果。//.....上面的代码$xhprofRuns->save_run($xhprof_data,'xhprof_test');回声'http://192.168.56.102/index.php?run='。$运行标识。'&source=xhprof_test';然后我们需要在xhprof_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.phphttps://segmentfault.com/a/1190000003509917===========各媒体平台均可搜索【硬核项目经理】
