最近需要查看系统的内存泄露相关的,而且可能堆外内存泄露导致,故开始尝试使用google-perftools,准备工作如下:
一:下载工具源码包
1:首先下载google-perftools包
http://code.google.com/p/google-perftools/downloads/list
2:下载libunwind
http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-beta.tar.gz
3:下载 dot
http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.28.0.tar.gz
4:下载gv
http://ftp.gnu.org/gnu/gv/
二:编译
1:perftools编译
编译的so文件位于 /perftools/.libs 隐藏目录中
ls *.so得到如下so文件
libprofiler.so libtcmalloc_debug.so libtcmalloc_minimal.so libtcmalloc_and_profiler.so libtcmalloc_minimal_debug.so libtcmalloc.so
2:libunwind编译
编译后的so文件位于 libunwind-0.99-beta/src/.libs 目录中
ls *.so.* 得到如下so文件
libunwind-setjmp.so.0 libunwind-setjmp.so.0.0.0T libunwind.so.7.0.0 libunwind-x86_64.so.7.0.0 libunwind-setjmp.so.0.0.0 libunwind.so.7 libunwind-x86_64.so.7 libunwind-x86_64.so.7.0.0T
编译后的 prrof位于 google-perftools-1.8/src目录中,是一个shell脚本文件
3:dot编译
dot 位于 graphviz-2.28.0/cmd中
三:准备配置使用google-perftools
具体见以下三篇文档
http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html
http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html
http://google-perftools.googlecode.com/svn/trunk/doc/heapprofile.html
针对遇到的问题做个总结:
make的时候 请使用j选项 ,例如make -j 10 同时开启10个任务来make,这样在多核上编译会快很多
如果遇到某个so文件所依赖的so在系统中找不到,但是自己的环境里有的,可以直接加在preload上,用冒号分开,例如
LD_PRELOAD=/home/dikar/google-perf/google-perftools-1.8/.libs/libtcmalloc_and_profiler.so:/home/dikar/google-per f/libunwind-0.99-beta/src/.libs/libunwind.so.7
用env设置变量参数时,不要替换成export,否则这里会有问题
使用pprof时,如果指定的某些依赖的bin不存在,可以直接修改pprof脚本,自己定制哪些bin所在的路径而不依赖默认配置。