目录
gperftools-heap_checker[1]
检查内存泄漏
使用
1,下载libtcmalloc.so文件并存放
2,将-ltcmalloc加入项目的编译选项来编译你的项目得到my_binary_compiled_with_tcmalloc
-L /usr/lib64 -ltcmalloc
3,把so文件放到你项目运行的地方。
env LD_PRELOAD="/usr/lib/libtcmalloc.so"
env HEAPCHECK=normal /usr/local/bin/my_binary_compiled_with_tcmalloc
4,注意:如果你的项目是一直运行的状态,需要合理安排主进程的退出,不然会crash。
5,结果分析
pprof --pdf my_binary_compiled_with_tcmalloc /tmp/mybin.hprof > /tmp/mybin.hprof.pdf
生成的pdf里,黑底是泄漏了,白底是没有泄漏。
gperftools-heap_profile[2]
检查不同函数的内存占比,类似cpu profiler
使用
1,2 同heap checker的前2步
3,运行,这样默认每1M会生成一个文件,测试发现就算加了signal还是会一直生成profile文件?
env LD_PRELOAD="/usr/lib/libtcmalloc.so"
env HEAPPROFILE=/tmp/mybin.hprof /usr/local/bin/my_binary_compiled_with_tcmalloc
4, 结果分析
pprof --pdf my_binary_compiled_with_tcmalloc /tmp/mybin.hprof > /tmp/mybin.hprof.pdf
参考link
[1]https://gperftools.github.io/gperftools/heap_checker.html
[2]https://gperftools.github.io/gperftools/heapprofile.html
valgrind安装及使用
c++编译器安装
centos7下安装C/C++的编译器gcc和g++,运行了如下两条命令[1]:
1 yum install gcc
2 yum install gcc-c++ libstdc++-devel (正确)
valgrind下载[2]
http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2
valgrind安装
1. tar -jxvf valgrind-3.12.0.tar.bz2
2. cd valgrind-3.12.0
3. ./configure --prefix=/home/valgrind/bin [3]
4. 编译valgrind
make
make install
5. 到这来已经安装成功了,但还不能直接使用,需要创建一个软连接。
cd /usr/bin/
ln -s /home/valgrind/bin/bin/valgrind valgrind
6. 验证
valgrind -h
valgrind使用
1. 使用valgrind检查内存
valgrind --log-file=valgrind.log.1 --leak-check=full --tool=memcheck --error-limit=no --show-reachable=yes ./应用程序 &
运行一段时间后查看valgrind.log.1,查看是否有lost内存泄漏问题等。
参考link
[1]https://blog.csdn.net/u011665991/article/details/81502711
[2]https://blog.csdn.net/justheretobe/article/details/52986461
[3]https://blog.csdn.net/ljxfblog/article/details/39209645