如何确定在Linux上运行的程序中的空闲内存?

时间:2009-10-08 18:54:28

标签: linux memory-leaks

我在Linux上运行了一个泄漏内存的软件。这是一个嵌入式系统,所以我没有很多调试工具,所以我使用的是printf。

如果没有做'popen()'调用'cat / proc / meminfo'并扫描MemFree行,我有没有办法把这些信息放到printf中?

目前我正在做类似的事情:

# ./myprogram &
# for (( c=0; c<99; c++)) do echo --- $c --- && cat /proc/meminfo | grep MemFree: && sleep 30; done;

哪个好,但我想知道是否有更好的方法。


编辑:迄今为止的四个回复并不是我想要的,我不够具体。

看来我的程序不是内存泄漏的原因;无论我是否想要查看是否可以添加一些“c”代码来查看/报告系统中的可用内存,而不是我的代码(进程)使用的内存量。

4 个答案:

答案 0 :(得分:2)

可能有用的两个库调用:

  • getrusage将允许您获取当前程序(以及可选的子进程)Resident Set Size;

  • sbrk(0)将返回程序中断的当前位置,该位置将随着程序堆大小的增加而增加。

答案 1 :(得分:1)

watch命令很有用,例如尝试。

watch -n 1 ps v `pgrep ./myprogram`

但您当然也可以尝试告诉tophtop及其图形变体只是观察您的过程。

另外,您可以通过查询自己的进程ID,查找/ proc / $ PID并从那里读取内存信息来尝试相同的操作,以便printf可以在运行时报告它们。

答案 2 :(得分:0)

您可以尝试使用mallinfo(尽管它已经过时了......我已成功使用过一次) http://scaryreasoner.wordpress.com/2007/10/17/finding-memory-leaks-with-mallinfo/

此外,njamd(或电围栏,或任何其他基于LD_PRELOAD的malloc调试器可能会有所帮助): http://sourceforge.net/projects/njamd/

另外,mtrace可能会引起关注: http://en.wikipedia.org/wiki/Mtrace

答案 3 :(得分:0)

您确定要查看免费的系统内存吗? 在大多数unix平台上,该值总是趋于零。 原因:   - 缓存文件系统块,以防有人再次需要它们   - 只有在某些进程需要内存时才会释放块   - 这些块是受欢迎的,因为后备存储是文件系统,    所以偷这些街区很便宜......不需要翻页。