php轻量级的质量分析工具xhprof的设置使用

旧的xhprof项目13年的时候曾经不保险了,所以接纳新的支撑php7的品类

xhprof是facebook开源出来的一个php轻量级的质量深入分析工具,跟Xdebug相通,但品质开支更低,

解析一下示范代码sample.php,关键部分唯有2行:

接下来就会收看图形化页面啦

就算运用Nginx的话,还足以由此Nginx的安排文件设置,那样侵入性更加小,何况能够完成基于站点的注入。

图片 1image.png

每风流洒脱项应该轻易驾驭,以连串自带的sample.php为例,示例中编辑了多少个main(卡塔尔国函数,main(卡塔尔函数中调用foo(卡塔尔国、bar(卡塔尔国等部分子函数进行了一点字符管理。整个程序运营进程中,main(卡塔尔国函数只运营了一回,何况由于main(卡塔尔国函数中归纳了有着的逻辑,所以main(卡塔尔(قطر‎函数的IWall%占比为百分百,然而由于main(卡塔尔(قطر‎函数的作用都以由子函数达成的,因此main(卡塔尔函数的EWall%独有0.3%,而foo(State of Qatar函数实现了举足轻重的做事,EWall%有98.1%。因而在深入深入分析更大型的程序时,往往须求依据这几项目标分别排序,从差异的角度审视质量消耗。

yum install graphviz

翻看phpinfo是还是不是安装成功

接下去使用旧版xhprof项目中的html组件来格式化展现文件.旧版xhprof地址: clone该项目事后没有必要再扩充编写翻译.拷贝生成输出的.xhprof文件到该品种内xhprof_html文件夹内.步入xhprof_html运维php内置服务 php -S localhost:8002, 展开 localhost:8002 后能够看来在此以前拷贝进的公文,点开后边世下图的页面:

四、重启服务

clone好项目按着表达编写翻译之后,平日的是布置在需求监察和控制的代码处后生机勃勃度能够输出.xhprof 文件了.然则用文件展开荒现音信卓殊不直观,近乎于不大概获取有用消息.

二、安装

brew install graphviz

(会自行将转移的恢弘文件拷贝到扩大目录中/usr/lib64/php/modules卡塔尔国

图片 2image.png

名词解释

能够见到函数的运作时刻与顺序.即使还认为远远不足明显,点击View Full Callgraph查看图形化界面,那时报错,大家需求安装图形化插件:graphviz

更加好的注入情势

修改auto_prepend_file配置

上面包车型客车代码应用了,给xhprof设置设想主机的章程。

pecl install xhprof-betaecho "extension=xhprof.so"  /etc/php5/fpm/conf.d/xhprof.iniservice php5-fpm restart

还足以用在生产条件中,也足以由程序开 关来调整是不是开展profile。

开头:xhprof_enable(); //开启监测 //xhprof_enable(XHPROF_FLAGS_NO_BUILTINS); 不记录内置的函数 //xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); 同时分析CPU和Mem的开销 //要测试的代码.........结尾:$xhprof_data = xhprof_disable(); //停止监测,返回运行数据$xhprof_root = '//'; //引入当初安装到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, "xhprof");echo 'a href="_html/index.phprun='.$run_id.'&source=xhprof" target="_blank"xhprof统计/a'; 

cp -r xhprof_html xhprof_lib /xxx/xhprof/

Function Name 函数名 Calls 调用次数 Calls% 调用百分比 Incl. Wall Time (microsec) 调用的包括子函数所有花费时间 以微秒算(一百万分之一秒) IWall% 调用的包括子函数所有花费时间的百分比 Excl. Wall Time (microsec) 函数执行本身花费的时间,不包括子树执行时间,以微秒算(一百万分之一秒) EWall% 函数执行本身花费的时间的百分比,不包括子树执行时间 Incl. CPU(microsecs) 调用的包括子函数所有花费的cpu时间。减Incl. Wall Time即为等待cpu的时间 减Excl. Wall Time即为等待cpu的时间 ICpu% Incl. CPU(microsecs)的百分比 Excl. CPU(microsec) 函数执行本身花费的cpu时间,不包括子树执行时间,以微秒算(一百万分之一秒)。 ECPU% Excl. CPU(microsec)的百分比 Incl.MemUse(bytes) 包括子函数执行使用的内存。 IMemUse% Incl.MemUse(bytes)的百分比 Excl.MemUse(bytes) 函数执行本身内存,以字节算 EMemUse% Excl.MemUse(bytes)的百分比 Incl.PeakMemUse(bytes) Incl.MemUse的峰值 IPeakMemUse% Incl.PeakMemUse(bytes) 的峰值百分比 Excl.PeakMemUse(bytes) Excl.MemUse的峰值 EPeakMemUse% EMemUse% 峰值百分比

一、前言

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

$xhprof_data中记录了程序单步运营进度中兼有的函数调用时间及CPU内部存款和储蓄器消耗等,具体记录哪些目的能够通过xhprof_enable的入口参数调节,之后的拍卖已经与xhprof扩充毫不相关,差十分少是编写了一个存款和储蓄类XHProfRuns_Default,将$xhprof_data系列化并保存到有些目录,能够经过XHProfRuns_Default(__DIR__卡塔尔国将结果输出到当前目录,如若不点名则会读取php.ini配置文件中的xhprof.output_dir,依然没有一点名则会输出到/tmp。

vi /etc/php5/fpm/php.ini

卓有成效的东西仍然记录下来吧,也低价未来的查询;此次记录一下xhprof的设置使用;

三、php.ini配置

五、使用办法