gperftools使用说明

原文章:使用gperftool + libuwind + graphviz来分析程序性能
为了了解程序的执行时间以及各个函数之间的调用关系,可以通过Google的gperftool来统计函数之间的关系以及时间信息。通过分析每个函数的时间信息,就可以看程序的关键消耗点在什么地方。
1. 安装
gperftools:http://code.google.com/p/gperftools/downloads/list
libunwind:http://download.savannah.gnu.org/releases/libunwind/
64位操作系统需要安装libunwind,官方推荐版本是libunwind-0.99-beta
安装过程:./configure [--disable-shared] && make && make install
Graphviz是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形,gperftools依靠此工具生成图形分析结果。
安装命令:yum install graphviz
2. 用法
1)在目标文件中加入#include ,在程序开始处加入ProfilerStart("my.prof"),在程序结束处加入ProfilerStop().
【gperftools使用说明】2)在编译连接时,需要链接libprofiler库,64位操作系统同时链接libunwind库。
3)如果是在多线程中,可以采用下面的形式来控制:

#include static int is_record = 0; if (is_record == 0) { ProfilerStart("my.prof"); }if (is_record == 0) {ProfilerStop(); is_record = 1; }

设置好上面的代码后,重新编译完成。直接运行即可。运行完成后就会生成my.prof文件。我在中间件pgoneproxy中增加后直接运行,就可以直接生成my.prof文件。但是在postgersql的psql的源码中增加后运行结束确不能生成。后面再网络上上面找到执行方式:env CPUPROFILE=./my.prof ./psql -h 127.0.0.1 -p 5432 -U db_user pgbench。安装这种执行方式确能够生成文件my.prof文件。
3. 分析输出
pprof脚本用于分析profile文件并输出结果,包括文本和图形两种输出风格。
例如:/urs/local/pgsql/bin/psql是目标程序,my.prof是profile文件
生成文本风格结果:pprof --text /urs/local/pgsql/bin/psql my.prof > profile.txt
生成图形风格结果:pprof --pdf /urs/local/pgsql/bin/psql my.prof > profile.pdf
4. 结果展示
下图是pgoneproxy中生成的pdf格式的结果的部分截图,从图片中可以看到每个函数的调用关系以及每个函数消耗的时间比例。


gperftools使用说明
文章图片
















    推荐阅读