Xhporf优化代码层

最近项目功能越加越多>最近项目功能越加越多 发现首页响应的速度变慢

blob.png

首页响应时间为1.5S,最近团队来新人需要查下代码质量了。就选择安装 Xhporf 来跟踪一下。

安装步骤如下:

Xhporf 是php 的一个扩展 安装 也很方便

1、下载 xhporf 包 选择在/home下

[root@localhost home]# wget http://pecl.php.net/get/xhprof-0.9.4.tgz

[root@localhost home]# tar xzf xhprof-0.9.4.tgz

[root@localhost home]# cd xhprof-0.9.4 && ls

2、当前目录下 有3个 比较重要的文件夹 examples(有个php文件 可以执行) xhprof_html xhprof_lib(这两个是 xhprof 类 和 前端页面) 将 xhprof_html xhprof_lib 复制到 web目录(本服务器根目录为 /home/wwwroot)

[root@localhost xhprof-0.9.4]# cp -r xhprof_html xhprof_lib /home/wwwroot/

[root@localhost xhprof-0.9.4]# cp examples/sample.php /home/wwwroot/

3、开始安装 [root@localhost xhprof-0.9.4]# cd extension/

[root@localhost extension]# /usr/local/php/bin/phpize

[root@localhost extension]# ./configure --with-php-config=/usr/local/php/bin/php-config

[root@localhost extension]# make && make install

4、编译完成 会出现一个.so 的目录 /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/ 这是去修改 php.ini 最下面添加

[xhporf]

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/xhprof.so

xhporf.output_dir=/tmp ;这个目录随意

保存 重启 php-fpm 在phpinfo() 查看 或 /usr/local/php/bin/php -m 查看

blob.png

5、 安装graphviz画图工具 用yum 会自动安装好 [root@localhost bin]# yum -y install graphviz

6、修改sample.php测试的例子 如何使用请查询PHP手续

<?php
 function   bar( $x ) {
    if   ( $x   > 0) {
      bar( $x   - 1);
    }
 }

 function   foo() {
    for   ( $idx   = 0;  $idx   < 5;  $idx ++) {
      bar( $idx );
      $x   =  strlen ( "abc" );
    }
 }
 // start profiling
 //xhprof_enable();
 xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
 // run program
 foo();

 // stop profiler
 $xhprof_data   = xhprof_disable();

 // display raw xhprof data for the profiler run
 print_r( $xhprof_data );

 //$XHPROF_ROOT = realpath(dirname(__FILE__) .'/..');
 include    "xhprof_lib/utils/xhprof_lib.php" ;
 include   "xhprof_lib/utils/xhprof_runs.php" ;

 // save raw data for this profiler run using default
 // implementation of iXHProfRuns.
 $xhprof_runs   =  new   XHProfRuns_Default();

 // save the run under a namespace "xhprof_foo"
 $run_id   =  $xhprof_runs ->save_run( $xhprof_data ,  "xhprof_foo" );

 echo   "---------------\n" .
       "Assuming you have set up the http based UI for \n" .
       "XHProf at some address, you can view run at \n" .
       " http://<xhprof-ui-address >/index.php?run=$run_id&source=xhprof_foo\n" .
       "---------------\n" ;
 echo   '<a href="/xhprof_html/index.php?run=' . $run_id . '&source=xhprof_foo" target="_blank">点我</a>' ;

这是可以访问了 localhost/sample.php 点击 a 连接 就可以看到了。 图我就不截了麻烦

点击 [View Full Callgraph] 如果报 failed to execute cmd " dot -Tpng" 需要去php.ini 找到 disable_functions 把proc_open从列表中去掉 重启 就可以了。

7、看下xhprof 报告列表的含义

Function Name 方法名称。

Calls 方法被调用的次数。

Calls% 方法调用次数在同级方法总数调用次数中所占的百分比。

Incl.Wall Time(microsec) 方法执行花费的时间,包括子方法的执行时间。(单位:微秒)

IWall% 方法执行花费的时间百分比。

Excl. Wall Time(microsec) 方法本身执行花费的时间,不包括子方法的执行时间。(单位:微秒)

EWall% 方法本身执行花费的时间百分比。

Incl. CPU(microsecs) 方法执行花费的CPU时间,包括子方法的执行时间。(单位:微秒)

ICpu% 方法执行花费的CPU时间百分比。

Excl. CPU(microsec) 方法本身执行花费的CPU时间,不包括子方法的执行时间。(单位:微秒)

ECPU% 方法本身执行花费的CPU时间百分比。

Incl.MemUse(bytes) 方法执行占用的内存,包括子方法执行占用的内存。(单位:字节)

IMemUse% 方法执行占用的内存百分比。

Excl.MemUse(bytes) 方法本身执行占用的内存,不包括子方法执行占用的内存。(单位:字节)

EMemUse% 方法本身执行占用的内存百分比。

Incl.PeakMemUse(bytes) Incl.MemUse峰值。(单位:字节)

IPeakMemUse% Incl.MemUse峰值百分比。

Excl.PeakMemUse(bytes) Excl.MemUse峰值。单位:(字节)

EPeakMemUse% Excl.MemUse峰值百分比。