callgrind 使用

来源:互联网 发布:php $a & 7 变量 编辑:程序博客网 时间:2024/05/18 01:47


一.        Valgrind安装说明:

先从http://valgrind.org/上将安装包down下来(使用3.2.0及以上版本),然后进行安装:

./configure

   make

   make install (as "root" if needed)

 

二.        使用valgrind进行性能瓶颈定位:

1.先将服务器运行环境搭建好,确定服务器程序能正常运行及响应请求。

2.使用valgrind启动服务器进程:(关于valgrind相关详细的参数说明请见最末的附注)

   valgrind --tool=callgrind --separate-threads=yes ./tcpd ./main.cfg

  (说明:--tool=callgrind,表示使用valgrind提供的性能分析功能,--separate-threads=yes,表示是要查看多线程相关数据)

3.使用另一台服务器向WEB服务器发起请求,一般我们使用ab工具来做性能测试,如:/usr/local/apache2/bin/ab –c100 -n100960  http://10.1.164.18/adsview?c=www&l=QQ_Width3&log=off

4.在启动了valgrind的服务器上dump相关性能数据:

callgrind_control -d -w /usr/local/ads5/bin

(说明:callgrind_control会将所有的线程性能数据dump到/usr/local/ads5/bin目录下面,生成如callgrind.out.23159.1-06这样的文件。可以使用callgrind_control –h命令查看帮助。)

 

5.查看性能数据:

在dump文件所在的目录下,使用callgrind_annotate --inclusive=yes callgrind.out.23159.1-06命令即可进行查看:

 

在输出中就可以查看所调用的函数所使用的时间数字

如果要进一步查看某一个函数里又有哪些函数被调用,及调用的时间值,可以使用callgrind_annotate --inclusive=yes --tree=both callgrind.out.23159.1-06命令进行查看。

 

如在解析的业务处理的函数FindCtreativePlayContent中, snprintf函数占用了大部分的时间,就可以针对此函数进行优化。

三.        进行函数优化:

找到了我们要优化的函数,接下来就是进行代码优化,如在FindCtreativePlayContent中,我们使用memcpy函数来替代snprintf函数。下面是另一个函数优化前后的比较:

 

优化的方法很多,针对不同的业务,有不同的优化方法。

四.        优化后效果比较:

优化完了之后,可以通过ab的性能测试,测试性能是否有提升,也可以通过valgrind提供的性能数据,手工计算此函数性能是否有了提升。如可以计算优化函数在总的业务流程中所占用的时间比。

0 0