如何查找进程的内存泄漏?

时间:2011-08-22 06:19:04

标签: linux memory-leaks

我需要找出特定进程的内存使用情况。实际上我需要找出我编写的应用程序中存在任何内存泄漏。我无法使用memfree/proc/meminfo,因为我们的系统已在RAM中安装了日志文件夹。

我经历了很多类似的查询,有些人建议使用ps aux命令。我对于哪个参数在几个小时后提供正确的内存使用或内存泄漏感到困惑。 PS AUX代表VSZ(virtual mem)RSS(resident set size)

我编写了一个示例程序,它分配4个字节的内存并取消分配。运行程序后,在分配内存时,VSZ值似乎增加,但在取消分配时不会减少。但RSS值显示正确,分配时增加,去分配时减少。

任何人都可以确认使用RSS值是否会指向代码中的内存泄漏量?或者还有其他方法吗?

3 个答案:

答案 0 :(得分:1)

要了解您可以使用pmap的详细信息: pmap pid

root@tm# pmap 1216
1216:   /usr/sbin/acpid
08048000     32K r-x--  /usr/sbin/acpid
08050000      4K rw---  /usr/sbin/acpid
08051000      4K rw---    [ anon ]
088f2000    140K rw---    [ anon ]
b7642000      4K rw---    [ anon ]
b7643000   1280K r-x--  /lib/i686/cmov/libc-2.11.3.so
b7783000      4K -----  /lib/i686/cmov/libc-2.11.3.so
b7784000      8K r----  /lib/i686/cmov/libc-2.11.3.so
b7786000      4K rw---  /lib/i686/cmov/libc-2.11.3.so
b7787000     12K rw---    [ anon ]
b7798000      8K rw---    [ anon ]
b779a000      4K r-x--    [ anon ]
b779b000    108K r-x--  /lib/ld-2.11.3.so
b77b6000      4K r----  /lib/ld-2.11.3.so
b77b7000      4K rw---  /lib/ld-2.11.3.so
bfd59000     84K rw---    [ stack ]
 total     1704K

答案 1 :(得分:1)

我知道这很古老,但我觉得有必要说,对于这样的事情,你真的只想使用像Valgrind这样的工具。即,Valgrind。这绝对是要走的路,特别是对于你正在编写(或写过)的程序,因为你可以调整编译标志,这样你就可以获得最有用的输出。假设您正在使用gcc,请尝试使用-g进行编译以启用调试符号,而不是strip二进制文件。

使用非常简单,文档位于链接的网站上。命令行上的基本用法仅为valgrind program。它不仅会向您展示具体内容,还会向您展示最终泄露的内存摘要。

答案 2 :(得分:0)

我使用top来做这类事情。

top -p <process id>