什么是gperftools
一个优化的内存管理算法—tcmalloc性能优于malloc。
一个用于CPU profile的工具,用于检测程序的性能热点,这个功能和gprof类似。
一个用于堆检查工具,用于检测程序在是够有内存泄露,这个功能和valgrind类似。
一个用于Heap profile的工具,用于监控程序在执行过程的内存使用情况。
如何安装
代码:https://github.com/gperftools/gperftools
git clone https://github.com/gperftools/gperftools.git
sh autogen.sh
./configure
make
sudo make install
使用HeapProfiler方法定位内存泄漏
1) Link your executable with -ltcmalloc
2) Run your executable with the HEAPPROFILE environment var set:
$ HEAPPROFILE=/tmp/heapprof <path/to/binary> [binary args]
3) Run pprof to analyze the heap usage
$ pprof <path/to/binary> /tmp/heapprof.0045.heap # run 'ls' to see options
$ pprof --gv <path/to/binary> /tmp/heapprof.0045.heap
也可以使用LD_PRELOAD方法,以freeswitch为例子。
LD_PRELOAD="/usr/local/lib/libtcmalloc.so" HEAPCHECK=normal HEAP_PROFILE_ALLOCATION_INTERVAL=104857600 HEAPPROFILE="/home/vv/log/freeswitch.log" /usr/local/freeswitch/bin/freeswitch -nonat
注:HEAPPROFILE指定生成dump文件的位置
HEAP_PROFILE_ALLOCATION_INTERVAL,程序内存每增长这一数值之后就dump 一次内存
等程序运行一段时间后,在/home/vv/log下会生成heap文件即freeswitch的内存镜像。
再用pprof命令生成pdf,查看内存泄漏的路径:
pprof --pdf --base freeswitch.log.0046.heap /usr/local/freeswitch/bin/freeswitch freeswitch.log.0102.heap > diff.46.102.pdf
生成的结果如下:

Total MB: 43.5,代表一共增长了43.5M内存
主要泄漏的线程是su_pthread_port_clone_main,占了93.9%
注:图片太小的化可以把网页放大来看
本文介绍了一个优化的内存管理算法tcmalloc及其所属工具集gperftools的功能特性,包括性能剖析、内存泄漏检测及堆内存监控,并提供了详细的安装步骤及使用案例。
4万+

被折叠的 条评论
为什么被折叠?



