heap profiler为google出品的用来监测内存的工具,可以用来进行内存泄漏的监测
使用方法:
(1)在makefile中链接libprofiler.a与libtcmalloc.a
(2)在程序代码中,希望开始监测的地方使用HeapProfilerStart(char *path),参数为要输出的文件的名称前缀;在停止监测的地方使用HeapProfilerStop(),测试代码如下:
#include <iostream>
#include "google/heap-profiler.h"
void test1()
{
int i = 100;
while(i--) {
char *buf = new char[1024*1024];
}
}
void test2()
{
int i = 100;
while(i--) {
char *buf = new char[1024*1024];
}
}
int main()
{
HeapProfilerStart("./test.log");
int i = 100;
while(i--) {
char *buf = new char[1024*1024];
}
test1();
test2();
HeapProfilerStop();
return 0;
}
测试用例中生成的heap文件名为test.log.0001.heap、test.log.0002.heap以此类推
(3)宏HEAP_PROFILE_ALLOCATION_INTERVAL指当一块大小为HEAP_PROFILE_ALLOCATION_INTERVAL的内存被申请出来,生成一个新的heap文件
(4)使用命令(pprof –text 可执行文件名 heap文件名)查看heap文件状态,其中包括每个函数的内存使用情况
例如:
(5)分析结果:
第一列为以MB为单位的内存分配情况
第二列和第五列是第一列和第四列的百分比表示
第三列是第二列累加之和,如:第二行的第三列就是第一行的第二列+第二行的第二列
第四列代表所有的进程和它调用函数的内存之和