首页->正文

用xhprof分析php代码

2011-04-25 -Web开发 标签: php

网站开发中要时刻关注代码的执行情况:整个代码的执行时间,具体到代码中每个函数的调用次数、执行时间、消耗内存数。而开发中经常由于本地环境、测试环境和正式环境的不同,导致执行时间的不同,很难定位执行的瓶颈所在,很难发现执行慢的页面。xhprof则可以很方便的获代码的执行情况,解决此类问题。

假设xhprof解压后放在/tmp/xhprof/下,php安装在/usr/local/php/bin/下
1 安装
% cd /tmp/xhprof/extension/
% /usr/local/php/bin/phpize
% ./configure --with-php-config=/usr/local/php/bin/php-config
% make
% make install

之后会生成一个xhprof.so文件
修改php.ini增加以下配置,加载刚生成的xhprof.so扩展,xhprof.output_dir为设置分析数据的保存目录(确认可写入),
当然你也可以不设置这个目录,可以在代码中自行处理分析数据的保存位置或者直接放至DB中。

[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmp

运行php -m可以看到刚安装的xhprof(咋,一闪而过,没看清还是装的php扩展太多了?试试直接php -m|grep xhprof)

2 测试
test_xhprof.php
<?php
function abc(){
     $s = str_repeat('1', 1024);
}
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
sleep(1);
abc();

$data = xhprof_disable();
print_r($data);
?>

结果如下:
Array
(
    [main()==>sleep] => Array
        (
            [ct] => 1          #sleep函数的调用次数
            [wt] => 998982     #消耗的时间,单位为微秒,1,000,000 微秒 = 1秒,差了0.001018s?
            [cpu] => 0         #cpu时间
            [mu] => 752        #内存使用情况,单位byte
            [pmu] => 0         #峰值内存使用情况
        )

    [abc==>str_repeat] => Array
        (
            [ct] => 1
            [wt] => 26
            [cpu] => 0
            [mu] => 1800
            [pmu] => 0
        )

    [main()==>abc] => Array
        (
            [ct] => 1
            [wt] => 99
            [cpu] => 0
            [mu] => 1792
            [pmu] => 0
        )

    [main()==>xhprof_disable] => Array
        (
            [ct] => 1
            [wt] => 0
            [cpu] => 0
            [mu] => 768
            [pmu] => 0
        )

    [main()] => Array
        (
            [ct] => 1
            [wt] => 999221 #main()是总的运行时间,可以在记录的时候判断此数值,如果大于某个阀值进行某种通知
            [cpu] => 0
            [mu] => 4904
            [pmu] => 0
        )

) 


3 用于正式环境要注意的问题
文档中提到了XHPROF_FLAGS_CPU会导致较高的系统占用,建议只开启时间&内存分析。另外如果网站访问量较大,可以设置一定的开启分析记录的几率,例如设置万分之一的几率
if (mt_rand(1, 10000) == 1){
     //开启
     xhprof_enable();
     $xhprof_on = true;
}

然后在处理结束时(参考php中的register_shutdown_function函数)保存分析结果。

另外xhprof_lib中提供了记录及可视化的分析数据展示,可参考下载包中的examples/sample.php,详细文档及更多功能见下载包的xhprof_html/docs/index.html

相关链接
xhprof下载:https://github.com/facebook/xhprof
其他分析工具:http://www.xdebug.org/ or http://pecl.php.net/package/apd
facebook下的更多开源项目:https://github.com/facebook

下一篇 正则修饰符m和s用法

上一篇 nginx SSI模块应用

相关文章

Ubuntu下编译安装PHP

使用curl_multi_init并发请求

php增加Last-Modified为何无效

正则修饰符m和s用法

用php解析配置文件

文章分类

开发小提示

  • 1:Mongodb中通过db.yourCollectionName. dataSize()查看某个文档的大小
  • 2:linux下用reset命令恢复查看二进制文件导致的命令行乱码
  • 3:查看MySQL表的索引情况show index from tableName
  • 更多...

交流

  • wangnow(a)126.com