监视程序在Linux中的内存使用情况

时间:2009-02-18 22:37:56

标签: c++ linux memory

Linux中是否有可用的图形或文本方式显示程序的内存使用情况?例如,如果我编写一个C ++程序并想要验证对象是否正在内存中正确分配和解除分配,那么是否有可用的应用程序可以直观地显示正在实例化和删除的对象?当我以前在Visual Studio中编程时,我记得单步执行程序并使用调试窗格来监视内存使用情况,并且正在寻找类似于Linux中的内容。

6 个答案:

答案 0 :(得分:10)

这不完全符合您的要求,但请查看Valgrind

答案 1 :(得分:3)

我通常会运行顶部来关注整体内存使用情况。

答案 2 :(得分:3)

while (/proc/<pid>/status)
 echo "VMSize: `ps -p <pid> -o vsize=`" >> ! mem.out
 pstack <pid> >> mem.out
 sleep 10
end

grep VMSize mem.out | awk -F':' '{print $2}' | sort -r -n | head -1会给你最高记忆。

还可以使用mem.out查看内存占用和当前堆栈相关性。

答案 3 :(得分:2)

很难计算出一个进程在支持虚拟内存的操作系统上使用了多少内存。

问题不在于它正在使用多少内存,而是多少内存是私有的以及共享多少内存。

您可以查看/ proc / pid / maps或/ proc / pid / smaps(可能)。这些文件只会告诉您进程已映射到其地址空间的内存量,而不是它使用了多少内存,并且绝对不会与系统中的其他进程共享多少内存。

甚至可以共享“私有”映射,因为fork()执行copy-on-write,因此私有页仍然可以与其他一些(相关的 - 通常是父或兄弟)进程共享。此外,已映射但从未使用的页面根本不会消耗空间。

可以看到每个映射的RSS(驻留集大小),但这只能告诉你驻留多少(在RAM中,而不是换成交换文件,尚未分配,或者还没有需求加载)从一个映射的文件),现在共享多少和什么。

我想你最好的选择是计算私人匿名内存的数量,在某些情况下可能没问题。

答案 4 :(得分:2)

1)首次运行

ps -u <your user id>

2)从1)

的输出中获取要监视的过程

3)然后运行

top -p <the pid of the process you want to monitor>

答案 5 :(得分:0)

conky(screenshots)是一个非常简单的计算机资源查看器,它通过桌面壁纸发布。我一直关注内存使用和特定程序的使用。