项目用到了tcmalloc,然后发现项目有内存泄露,因此略微玩了一下Google Perftools
1.安装
目前Google Perftools的Repo在https://github.com/gperftools/gperftools/tree/master
我们可以下载8.0的Release版本 https://github.com/gperftools/gperftools/tree/at8_0-release
下载之后进行解压:
> cd google-perftool
> ./autogen.sh
> ./configure --prefix=<build_path>
> make
> make install
安装成功!
2.使用
使用方法很简单,目前我们项目使用方式如下(Linux下):
export LD_PRELOAD=<build_path>/lib/libtcmalloc.so
3.Heap Profile
我们可以将tcmalloc使用Heap的信息dump出来,通过pprof工具进行查看。
env HEAPPROFILE="./perf_log/game.log" HEAP_PROFILE_ALLOCATION_INTERVAL=10000000 <program>
HEAPPROFILE: 用于指明dump出来的log信息的前缀
HEAP_PROFILE_ALLOCATION_INTERVAL: 定义采样频率,默认是1G,当tcmalloc分配内存到达配置值时,将会dump出log
查看信息
比如我们的<program>是python
pporf --text /usr/bin/python game.log.0001.heap
4.Heap Leak Profile
我们可以使用tcmalloc的Heap Checker去检查内存泄露
env HEAPCHECK=normal <program>
Heap Checker会在程序结束的时候打印出leak数据,并会提示使用什么指令进行详细信息的查看。
--text: 文本数据
--pdf: 调用栈的信息
5.References
- http://dirtysalt.info/gperftools.html#orgheadline2 -- 对log信息的说明