安装和使用Xhprof

来源:互联网 发布:qq输入法数据无法使用 编辑:程序博客网 时间:2024/05/29 08:29
安装xhprof(如果有错误,要make clean,重新编译)


1 下载xhprof
#wget (去https://github.com/phacility/xhprof/archive/master.zip下载,找了一天的问题,才发现官网给的那个版本压根不行,不知道是服务器上的原因还是怎么,死活不能用,而且这个地址百度还百度不到,谷歌给的第一条就是!!!坑死了!!!放到yii里就各种不能用,后来重新编译了就好了,如果进行不下去的时候又找不到原因,可以重新编译一下
#tar zxf xx.gz(下下来的文件)


2  cd xhprof
   cd extension
   /usr/local/php/bin/phpize(用自己环境里的phpize路径
   ./configure --enable-xhprof --with-php-config=/usr/local/php/bin/php-config(你自己环境的php-config路径,路径错了安装肯定失败
   make && make install(如果有报错,记得先make clean 再做重新编译,如果还是不行,就得换个版本重新编译了,这个地方我试了好几遍才成功比较郁闷
3  新建文件/usr/local/etc/php/php.d/xhprof.ini(或者在php.ini最后加上,都行)
   内容:extension=xhprof.so;
         xhprof.output_dir=/data/logs/Appstore/Xhprof/

4  打开phpinfo() 查看扩展是否加上(如果没有,重新编译,直到成功为止)


如果不需要显示图,到现在就可以用了,自己建一个xhprof的域名,然后到example里的sample.php里进行测试就行了

如果需要显示图,那接着往下走


安装png(确认线上是否有libpng扩展,如果有就不需要安装了) 
1 wget http://nchc.dl.sourceforge.net/project/libpng/libpng15/1.5.1/libpng-1.5.1.tar.gz  
2 tar zxf libpng-1.5.1.tar.gz  
3 cd libpng-1.5.1  
4 ./configure --with-php-config=/usr/local/php/bin/php-config
5 make  
6 make install 


安装完以后开始装Graphviz


安装Graphviz 
1 wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz  
2 tar zxf graphviz-2.24.0.tar.gz  
3 cd graphviz-2.24.0  
4./configure  --with-php-config=/usr/local/php/bin/php-config --with-png=yes
5  make  
6 make install 


完成以后如果生成/usr/bin/dot则成功

这时候你会发现图还是显示不出来,提示dot - png fail,是说他找不到dot的路径,到你的xhprof/xhprof_lib/utils/callgraph_utils.php 里的dot路径为/usr/bin/dot(你自己生成的dot地址)

这时候图基本上就出来了,有时候会报Error: Could not find/open font的错误,找了一天也没找到原因,跪了


见下面的图,是不是很壮观,出来的时候成就感爆棚


下面说怎么融合到你自己的代码里面去


在分析时跳过内置函数 xhprof_enable(XHPROF_FLAGS_MEMORY ,array('ignored_functions' => array('call_user_func','call_user_func_array')));


使用机制:

我是自己封装了个类,也可以直接用

在函数的开头调用类以后会在你的xhprof.output_dir里生成一个文件

在/data/logs/Appstore/Xhprof/下会生成比如54a3a2606e75b.top-size-10-page-1-list.json.xhprof的文件,


如果            $run_id = $xhprofRuns->save_run($xhprofData, $name); 这个name默认是xhprof_foo,如果你想在生成的文件里直接看到是哪个接口生成的解析文件,

可以在这块指定name,我是这样做的

$name = str_replace('/', '-', $_SERVER['REQUEST_URI']);
            
$name = substr($name, 1);


$xhprofRuns = new XHProfRuns_Default();
            
$run_id = $xhprofRuns->save_run($xhprofData, $name);


然后根据你自己配置的域名就可以看效果了,比如


访问http://xxx/xhprof_html/index.php?run=54a3a2606e75b&source=top-size-10-page-1-list.json(这块的source是你自己定义的name,如果没定义,就不用改,如果不改,会看不到内容)就可以看到了


点view full callgraph就可以点击图片看细节了,比较清晰明了



http://xxx/xhprof_html/callgraph.php?run=54a3a2606e75b&source=top-size-10-page-1-list.json



0 0
原创粉丝点击