我需要找出特定进程的内存使用情况。实际上我需要找出我编写的应用程序中存在任何内存泄漏。我无法使用memfree
或/proc/meminfo
,因为我们的系统已在RAM中安装了日志文件夹。
我经历了很多类似的查询,有些人建议使用ps aux
命令。我对于哪个参数在几个小时后提供正确的内存使用或内存泄漏感到困惑。 PS AUX
代表VSZ(virtual mem)
和RSS(resident set size)
。
我编写了一个示例程序,它分配4个字节的内存并取消分配。运行程序后,在分配内存时,VSZ
值似乎增加,但在取消分配时不会减少。但RSS
值显示正确,分配时增加,去分配时减少。
任何人都可以确认使用RSS
值是否会指向代码中的内存泄漏量?或者还有其他方法吗?
答案 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>