valgrind工具是一个linux下的调试可执行程序的工具,它可以检查内存泄露,内存越界。 valgrind由内核(core)以及基于内核的其他调试工具组成,内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具,其他工具则类似于插 件(plug-in),利用内核提供的服务完成各种特定的内存调试任务。 valgrind包括一系列工具,我们主要用到的是Memcheck,即程序内存使用的检查。 内存检测包括: 内存泄露 非法内存访问,使用已释放的内存 未初始化的内存 重复内存释放 使用超过malloc分配的内存空间 Malloc/free,new/delete申请和释放内存的匹配 更多的信息请访问valgrind官方网站: http://valgrind.org/
1.安装:
a.下载安装包 官方网站或其他网站下载linux版本的压缩包,例如本文使用的 安装包“valgrind-3.10.0.tar.bz2”。
b.解压缩安装包 tar –jxvf valgrind-3.10.0.tar.bz2
c.cd到解压后生成目录valgrind-3.10.0
d.运行./autogen.sh设置环境
e. ./configure;配置Valgrind,生成MakeFile文件,具体参数信息详见INSTALL文件。一般只需要设置--prefix= ,如果安装在/roo/valgrind, ./configure --prefix=/home/a/valgrind/
f. make;编译Valgrind
g. make install;安装Valgrind到指定的/home/a/valgrind/,同时将权限改成755,让其他用户也能执行 至此,Valgrind安装完成。
2.使用:
Valgrind是一个功能强大的工具,可以使用如下命令查看所有可带的参数 >valgrind --help 下面介绍内存检测有关的参数项。 --tool :选择要使用的功能,内次检测是memcheck --leak_check:对内存泄露给出详细的信息 3. --show-reachable=yes :检测能运行到,或间接丢失的块 4. --trace-children=yes :自动跟踪到子进程中 5. --log-file=report.log :检查结果文件最后生成report文件中,屏幕上并不打印错误 使用valgrind检测业务接口机的内存使用情况,要进行如下的设置: 先不起restpro进程,也就是不加载restpro运行; 用下面指令单独运行 valgrind --tool=memcheck --leak-check=full --show-reachable=yes --trace-children=yes --log-file=/home/a/report.log restpro
kill -15 杀掉进程后,检查报告会写入
valgrind -/home/a/report.log-tool=memcheck --leak-check=full --show-reachable=yes --trace-children=yes --log-file=/home/zxin100/nginx/sbin/report.log ./nginx
报告解析:
definitely lost: 0 bytes in 0 blocks // //确认丢失 要修复
/可能丢失
==17310== possibly lost: 0 bytes in 0 blocks
//可以访问,未丢失但也未释放
==17310== still reachable: 72,704 bytes in 1 blocks
==17310== suppressed: 0 bytes in 0 blocks