gperftools工具介绍
gperftools是Google推出的一个非常强大的性能分析工具集。
gperftools工具的主要功能包括:
- CPU性能分析
能够通过统计一定时间内各个功能单元(线程、函数等)的执行时间并给出其占用比例。 - 内存性能分析
统计单位时间内各单元对内存的占用数量。 - 内存泄漏检查
查找程序中是否有内存泄露。
注:本文只介绍gperftools工具在定位内存泄漏问题上的使用。
gperftools工具安装
执行如下操作:
git clone https://github.com/gperftools/gperftools.git
tar -zxvf gperftools-2.15.tar.gz
cd gperftools-2.15/
./configure
make -j8
sudo make install
注:
(1)如果网速较慢,可直接去下载压缩包。
如我下载的地址:https://github.com/gperftools/gperftools/releases/tag/gperftools-2.15
(2)如果上述过程没有报错,则说明gperftools安装成功。
查看pprof安装路径
lx@lx-virtual-machine:~/tcmalloc/gperftools-2.15$ ls /usr/local/bin/pprof*
/usr/local/bin/pprof /usr/local/bin/pprof-symbolize
查看tcmalloc库安装路径
lx@lx-virtual-machine:~/tcmalloc/gperftools-2.15$ ls /usr/local/lib/libtcmalloc*
/usr/local/lib/libtcmalloc.a /usr/local/lib/libtcmalloc_minimal_debug.a
/usr/local/lib/libtcmalloc_and_profiler.a /usr/local/lib/libtcmalloc_minimal_debug.la
/usr/local/lib/libtcmalloc_and_profiler.la /usr/local/lib/libtcmalloc_minimal_debug.so
/usr/local/lib/libtcmalloc_and_profiler.so /usr/local/lib/libtcmalloc_minimal_debug.so.4
/usr/local/lib/libtcmalloc_and_profiler.so.4 /usr/local/lib/libtcmalloc_minimal_debug.so.4.5.16
/usr/local/lib/libtcmalloc_and_profiler.so.4.6.11 /usr/local/lib/libtcmalloc_minimal.la
/usr/local/lib/libtcmalloc_debug.a /usr/local/lib/libtcmalloc_minimal.so
/usr/local/lib/libtcmalloc_debug.la /usr/local/lib/libtcmalloc_minimal.so.4
/usr/local/lib/libtcmalloc_debug.so /usr/local/lib/libtcmalloc_minimal.so.4.5.16
/usr/local/lib/libtcmalloc_debug.so.4 /usr/local/lib/libtcmalloc.so
/usr/local/lib/libtcmalloc_debug.so.4.5.16 /usr/local/lib/libtcmalloc.so.4
/usr/local/lib/libtcmalloc.la /usr/local/lib/libtcmalloc.so.4.5.16
/usr/local/lib/libtcmalloc_minimal.a
刷新动态库
sudo ldconfig
测试pprof命令
注:如果出现上述命令选项即正确安装成功。
上述可知,gperftools工具安装完成后,会产生包括TCMalloc、heap-checker、heap-profiler和cpu-profiler共4个组件文件。其中,会在/usr/local/lib/目录下会生成libtcmalloc*、libprofiler*库,同时在/usr/local/bin/目录下生成pprof文件,这二者都是定位和分析内存泄漏问题所需要的。
Tcmalloc和pprof使用
测试示例一(非侵入式)
测试程序如下
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 void func_malloc(char* ch)
5 {
6 ch = (char *)malloc(sizeof(char));
7 return ;
8 }
9
10 int main()
11 {
12 printf("hello world!\n");
13
14 char* ch = NULL