tcmalloc google heap profiler调查内存泄露
用tcmalloc的heap profiler可以调查内存泄露问题,比如下面这段代码,每次会随机泄露一小块内存
#include <map>
#include <stdlib.h>
void leak_func()
{
std::map<int, char*> memorys;
while (1)
{
char* m = new char[rand() % (1 << 20)];
memorys[rand()] = m;
}
}
int main()
{
leak_func();
return 0;
}
编译的时候不是必须链接tcmalloc,运行时用LD_PRELOAD指定tcmalloc path也可以,编译好后指定LD_PRELOAD和HEAPPROFILE运行程序,HEAPPROFILE指定了memory heap文件dump的地址
LD_PRELOAD=/usr/lib64/libtcmalloc.so HEAPPROFILE=/data/ ./a.out
很快就dump出来很多heap文件,可以直接分析某个文件的内存分配
也可以比较两个heap之间的diff,比如某一段时间内存突然涨上去了就可以用两个heap文件来分析
第一列显示了使用的物理内存MB,第四列显示了函数本身和它的调用函数总共申请的内存,第二列和第五列是第一列和第四列的百分比,第三列是第二列的累积和
就我们这个简单的例子来看,很清晰的就能看到在leak_func里泄露了5819.9MB内存
最后更新于