项目地址 http://code.google.com/p/gperftools/
引用原文里的一段英文介绍
Perftools is a collection of a high-performance multi-threaded malloc() implementation, plus some pretty nifty performance analysis tools.
Perftools 是一个高效的多线程 malloc 实现,附加一些很好的性能分析工具。使用这个工具进行分析 cpu profiling 和 memory leak 分析是很不错的。
下载地址 http://code.google.com/p/gperftools/downloads/list ,从这里面选择一个版本,下载后解压,然后进行安装。安装步骤如下
./configure –enable-frame-pointers Make Make install
不出问题的话,上面就可以完成安装了,如有问题,看下 INSTALL,README 文档进行解决。
使用方法有两种
第一种 设置 LD_PRELOAD
假设要分析的执行文件为 run.out
Export LD_PRELOAD=/usr/local/lib/libprofiler.so:/usr/local/lib/libtcmalloc.so
其中第一个库是做 cpu profiling 需要的库,第二个是对 memory 做 profiling 需要的库
然后执行 CPUPROFILE=/tmp/prof.out HEAPCHECK=strict /path/to/run.out
便会在 /tmp/ 目录下生成 prof.out 和 /tmp/run.out.xxxend.heap. 这样的文件
第二种在编译的时候添加 -lprofiler –ltcmalloc 选项
例如 gcc –o run.so test.c –lprofiler –ltcmalloc ,这样生成的 run.out 在运行的时候也能得到 profling 的结果文件
CPUPROFILE=/tmp/prof.out HEAPCHECK=strict /path/to/run.out
同样会在 /tmp 目录下生成第一种方法那样的两个文件
使用 pprof 对 profiling 的结果文件进行分析
对 cpu profiling 的结果文件执行下面的命令
pprof --text ./a.out /tmp/prof.out
会得到类似下面的输出,从中可以看到各个函数执行时间的比例
Using local file ./a.out. Using local file /tmp/prof.out. Removing killpg from all stack traces. Total: 2255 samples 1677 74.4% 74.4% 1677 74.4% consumeSomeCPUTime1 578 25.6% 100.0% 1131 50.2% consumeSomeCPUTime2 0 0.0% 100.0% 2255 100.0% __libc_start_main 0 0.0% 100.0% 2255 100.0% main 0 0.0% 100.0% 2255 100.0% stupidComputing
每一列的含义如下所示
1.Number of profiling samples in this function
2.Percentage of profiling samples in this function
3.Percentage of profiling samples in the functions printed so far
4.Number of profiling samples in this function and its callees
5.Percentage of profiling samples in this function and its callees
6.Function name
对 memory profiling 的结果文件执行下面的命令
pprof --text ./run.out /tmp/run.out.29318._main_-end.heap
会得到类似下面的输出,给出了 memory leak 产生的函数及所占比例
Total: 0.0 MB 0.0 66.7% 66.7% 0.0 66.7% b 0.0 33.3% 100.0% 0.0 33.3% a 0.0 0.0% 100.0% 0.0 100.0% __libc_start_main 0.0 0.0% 100.0% 0.0 100.0% main
每一列的含义同上面类似,将 leak 的比例函数执行时间的比例即可。
当然,还可以选择其他的生成方式,例如将--text换成--pdf,--gv等这样的,生成pdf和图片方式。
Perftools 是个很不错的工具,对无论性能分析,还是对内存进行分析,都能给开发者提供很好的解决问题思路。而且工具是开源的,如果需要加一些什么功能或者修复什么 bug ,也是比较方便的,我们这边有同学就加了一点功能。以后把这个工具用起来,再慢慢谈使用这个工具的一些经验吧。