Linux 下几款程序内存泄漏检查工具

1690阅读 0评论2017-05-03 xiong9937
分类:服务器与存储

针对第一点,以下将介绍几款内存泄漏检查工具

工具 描述
valgrind 一个强大开源的程序检测工具
mtrace GNU扩展,用来跟踪malloc,mtrace为内存分配函数(malloc,rellaoc,memalign,free)安装hook函数
dmalloc 用于检查C/C++内存泄漏的工具,即是检查是否存在程序运行结束还没有释放的内存,以一个运行库发布
memwatch 和dmalloc一样,它能检测未释放的内存、同一段内存被释放多次、位址存取错误及不当使用未分配之内存区域
mpatrol 一个跨平台的 C++ 内存泄漏检测器
dbgmem 也是一个动态库发布的形式,优点类似dmalloc,但是相比之下,可能特点少了一些
Electric Fence 不仅仅能够跟踪malloc()和free(),同时能够检查读访问以及写入,能够准确指出导致错误的指令

Valgrind详解

这里写图片描述

Valgrind包括以下一些工具:

Linux程序内存空间布局

这里写图片描述

内存检查原理

Memcheck检测内存问题的原理图:

这里写图片描述

1.Valid-value表:

对于进程的整个地址空间中的每一字节(byte),都有与之对应的8个bits,对于CPU的每个寄存器,也有一个与之对应的bit向量。这些bits负责记录该字节或者寄存器值是否具有有效 的、已经初始化的值

2.Valid-Address表

对于进程整个地址空间中的 么一个字节(byte),还有与 之对应的1bit,负责记录该地址是否能够被读写。

检测原理


接下来我主要是介绍valgrind的安装和使用,关于其他的工具,大家可以自己上网去查阅资料,谢谢配合!

Valgrind 安装

tar -jxvf valgrind-3.11.0.tar.bz2 -C /usr/local/src

cd /usr/local/src/valgrind-3.11.0

./autogen.sh 

./configure --prefix=/usr/local

make && make install

valgrind 使用

这里写图片描述
这里写图片描述

利用Memcheck发现常见的内存问题总结

Memcheck将内存泄露分为两种,一种是可能的内存泄露(Possibly lost),另外一种是确定的内存泄露(Definitely lost)。Possibly lost 是指仍然存在某个指针能够访问某块内存,但该指针指向的已经不是该内存首地址。Definitely lost 是指已经不能够访问这块内存。而Definitely lost又分为两种:直接的(direct)和间接的(indirect)。直接和间接的区别就是,直接是没有任何指针指向该内存,间接是指指向该内存的指针都位于内存泄露处。在上述的例子中,根节点是directly lost,而其他节点是indirectly lost

上一篇:10有用的“定位”命令Linux新手的实践示例
下一篇: 大数据时代的 9 大Key-Value存储数据库