使用GPERFOOLS排查内存泄漏

什么是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%
注:图片太小的化可以把网页放大来看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值