使用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 <google/profiler.h>,在程序开始处加入ProfilerStart("my.prof"),在程序结束处加入ProfilerStop().

2)在编译连接时,需要链接libprofiler库,64位操作系统同时链接libunwind库。

3)如果是在多线程中,可以采用下面的形式来控制:

#include <google/profiler.h>

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格式的结果的部分截图,从图片中可以看到每个函数的调用关系以及每个函数消耗的时间比例。

转载于:https://my.oschina.net/u/918218/blog/698961

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值