Linux常用系统分析工具-内存

valgrind

valgrind 是在Linux程序中广泛使用的调试应用程序。它尤其擅长发现内存管理的问题,可以检查程序运行时的内存泄漏问题等。我们在使用valgrind时也主要用到它的内存泄漏检测功能,即memcheck功能。它检查所有对内存的读/写操作,并截取所有的malloc/new/free/delete调用。

因此memcheck工具能够探测到以下问题:

1、使用未初始化的内存;

2、读/写已经被释放的内存;

3、读/写内存越界;

4、读/写不恰当的内存栈空间;

5、内存泄漏;

6、使用malloc/new/new/new[]和free/delete/delete[]不匹配。

src和dst的重叠valgrind的可选的参数以及对应的含义如下所示:
-version:显示valgrind内核的版本、每个工具都有各自的版本;
q -quit:安静的运行,只打印错误信息;
v -verbose:更详细的信息,增加错误数统计;
-trace-children=no|yes:跟踪子线程;
-track-fds=no|yes:增加时间戳到LOG信息;
-log-fd=<number>:输出LOG到描述符文;
-log-file=<file>:将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID;
-log-file-exactly=<file>:输出LOG信息到file;
-log-file-qualifier=<VAR>:取得环境变量的值来作为输出信息的文件名;
-log-socket=ipaddr:port:输出LOG到socket,ipaddr:port。

LOG信息输出:

-xml=yes:将信息以xml格式输出,只有memcheck可用;
-num-callers=<number> show <number> callers in stack traces [12];
-error-limit=no|yes:如果太多错误,则停止显示新错误? [yes]
-error-exitcode=<number>:如果发现错误则返回错误代码 [0=disable];
-db-attach=no|yes:当出现错误,valgrind会自动启动调试器gdb [no];
-db-command=<command>:启动调试器的命令行选项 [gdb -nw %f %p]

Memcheck工具的相关选项:

–leak-check=no|summary|full:要求对leak给出详细信息?[summary]
–leak-resolution=low|med|high how much bt merging in leak check [low]
–leak-reachable=no|yes show reachble blocks in leak check ? [no]

img

示例(这个示例是从网上找的、看了半天没看懂到底该怎么用、有知道的可以留言告诉下、感谢):

valgrind –leak-check=
full /usr/local/app/taf/tafnode/data/TenFortune.WeChatProxySvr/bin/WeChatProxySvr
–config=
/usr/local/app/taf/tafnode/data/TenFortune.WeChatProxySvr/conf/TenFortune.WeChatProxySvr.config.conf -trace-child=yes

推荐文章