大名鼎鼎的Google的内存检查工具
1 编译gperftools
本身库的编译没啥好说的,标准流程,需要automake支持
./autogen.sh
./configure
make && make install
2 编译应用程序
在实际工程的Makefile中添加LIB库依赖.
一般来说 -ltcmalloc就可以了
如果需要使用Profiler的功能,那么用 -ltcmalloc_and_profiler
如果需要检查数组越界等,那么需要用 -ltcmalloc_debug(会大大降低处理速度)
3 运行程序获取快照
- 启动前设置以下环境变量
CPUPROFILE=分析结果路径,建议完整路径
#即SIGUSR2,如果想要SIGUSR1那就10
CPURPOFILESIGNAL=12
- 在需要捕获一次快照时, kill -s 12 pid
此时在你的设定目录下,会生成一次快照。文件名为CPUPROFILE+".0001",数字递增
- 请务必保证SIGPROF信号不被捕获,否则会影响正常运行
- 你设定的快照触发的信号量,同样也不能被捕获
4 对比快照
建议安装graphviz(需要dot这个命令),可以支持导出成PDF,形成一个新增/减少元素的调用关系图。
pprof --pdf --base=<老的一次HEAP> <程序名> <新的HEAP> > result.pdf
可以增加参数 --lines 详细到行。
5 高阶使用
在某些时候,因为信号量被劫持,或希望在某个事务完成后,通过程序触发一次快照的生成,可以如下操作
#include <heap-profiler.h>
if (IsHeapProfilerRunning() == 0)
HeapProfilerStart("myheap");
HeapProfilerDump("");