使用 google-perftools 剖析程序性能瓶颈_第1页
使用 google-perftools 剖析程序性能瓶颈_第2页
使用 google-perftools 剖析程序性能瓶颈_第3页
使用 google-perftools 剖析程序性能瓶颈_第4页
使用 google-perftools 剖析程序性能瓶颈_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用google-perftools剖析程序性能瓶颈冯文龙.软件工程师,IBM简介:google-perftools是一款优秀的LinuxC/C+程序的性能剖析及优化工具,它提供了将目标程序运行时所消耗的CPU时间片进行剖析和图形化输出剖析结果的功能。本文将从零开始,一步一步引导读者搭建并运行一个google-perftools的剖析环境,并用一个示例来演示如何使用该工具找到目标程序的性能瓶颈。发布日期:2010年12月16日google-perftools简介google-perftools是一款针对C/C+程序的性能分析工具,它是一个遵守BSD协议的开源项目。使用该工具可以对CPU时间片、

2、内存等系统资源的分配和使用进行分析,本文将重点介绍如何进行CPU时间片的剖析。google-perftools对一个程序的CPU性能剖析包括以下几个步骤。编译目标程序,加入对google-perftools库的依赖。运行目标程序,并用某种方式启动/终止剖析函数并产生剖析结果。运行剖结果转换工具,将不可读的结果数据转化成某种格式的文档(例如pdf,txt,gv等)。安装您可以在google-perftools的网站( HYPERLINK /p/google-perftools/downloads/list /p/google-perftools/downloads/list)上下载最新版的安装包

3、。为完成步骤3的工作,您还需要一个将剖析结果转化为程序员可读文档的工具,例如gv( HYPERLINK /software/gv/)%e3%80%82 /software/gv/)。编译与运行您需要在原有的编译选项中加入对libprofiler.so的引用,这样在目标程序运行时会加载工具的动态库。例如本例中作者的系统中,bprofiler.so安装在/usr/lib目录下,所以需要在makefile文件中的编译选项加入“-L/usr/lib-Iprofiler”。google-perftools需要在目标代码的开始和结尾点分别调用剖析模块的启动和终止函数,这样在目标程序运行时就可以对这段时间内

4、程序实际占用的CPU时间片进行统计和分析。工具的启动和终止可以采用以下两种方式。使用调试工具gdb在程序中手动运行性能工具的启动/终止函数。gdb是Linux上广泛使用的调试工具,它提供了强大的命令行功能,使我们可以在程序运行时插入断点并在断点处执行其他函数。具体的文档请参照/software/gdb/,本文中将只对用到的几个基本功能进行简单介绍。使用以下几个功能就可以满足我们性能调试的基本需求,具体使用请参见下文示例。命令功能ctrl+c暂停程序的运行c继续程序的运行添加函数断点(参数可以是源代码中的行b号或者一个函数名)p打印某个量的值或者执行一个函数调用在目标代码中直接加入性能工具函数的

5、调用,该方法就是在程序代码中直接加入调试函数的调用。两种方式都需要对目标程序重新编译,加入对性能工具的库依赖。对于前者,他的好处是使用比较灵活,但工具的启动和终止依赖于程序员的手动操作,常常需要一些暂停函数(比如休眠sleep)的支持才能达到控制程序的目的,因此精度可能受到影响。对于后者,它需要对目标代码的进行修改,需要处理函数声明等问题,但得到的结果精度较高,缺点是每次重新设置启动点都需要重新编译,灵活度不高,读者可以根据自己的实际需求采用有效的方式。示例详解该程序是一个简单的例子,文中有两处耗时的无用操作,并且二者间有一定的调用关系。清单1.示例程序voidconsumeSomeCPUTi

6、me1(intinput)inti=0;input+;while(i+10000)i-;i+;i-;i+;voidconsumeSomeCPUTime2(intinput)input+;consumeSomeCPUTime1(input);inti=0;while(i+10000)i-;i+;i-;i+;intstupidComputing(inta,intb)inti=0;while(i+10000)consumeSomeCPUTime1(i);intj=0;while(j+5000)consumeSomeCPUTime2(j);returna+b;intsmartComputing(int

7、a,intb)returna+b;voidmain()inti=0;printf(reachedthestartpointofperformancebottleneckn);sleep(5);/ProfilerStart(CPUProfile);while(i+MyProfile.pdf转换后产生的结果文档如下图。图中的数字和框体的大小代表了的某个函数的运行时间占整个剖析时间的比例。由代码的逻辑可知,stupidComputing,stupidComputing2都是费时操作并且它们和consumeSomeCPUTime存在着一定的调用关系。图1.剖析结果结束语本文介绍了一个Linux平台上的性能剖析工具google-perftools,并结合实例向读者展示了如何使用该工具配置、使用及分析性能瓶颈。下载名字大小下载方法src.rar4KBHTTP描述本文用到的示例关于下载方法的信息参考资料学习google-perftools主页在developerWorksLinux专区寻找为Linux开发人员(包括Linux新手入门)准备的更多参考资料,查阅我们最受欢迎的文章和教程。在developerWorks上查阅所有Linux技巧和Linux教程。随时关注de

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论