安装xhprof(如果有错误,要make clean,重新编译)
1 下载xhprof
#wget (去官网下载,我没从官网下载,放到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地址)
这时候图基本上就出来了
见下面的图,是不是很壮观,出来的时候成就感爆棚
下面说怎么融合到你自己的代码里面去
在分析时跳过内置函数 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