繁体   English   中英

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

[英]monitor a program's memory usage in Linux

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

这不完全是你想要的,但看看Valgrind

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

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

我通常运行top以密切关注整体内存使用情况。

1)首先运行

ps -u <your user id>

2)从1)的输出中获取要监视的进程的et pid

3)然后跑

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM