2009-02-18 77 views
10

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

回答

10

这不完全是你正在寻找,但看看Valgrind

+0

好的建议。看起来像一个非常有用的工具! – Chris 2009-02-19 01:16:55

3

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

0

conky(screenshots)是一款非常简单的计算机资源查看器,可在桌面壁纸上张贴。我一直关注内存使用和特定程序的使用。

2

确定进程在支持虚拟内存的操作系统上使用多少内存确实很困难。

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

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

甚至可以共享“私人”地图,因为fork()在写入时进行复制,所以私人页面仍然可以与其他一些(相关 - 通常是父级或兄弟)进程共享。而且,已经映射但从未使用的页面根本不会消耗空间。

可以看到每个映射的RSS(Resident Set Size),但只能告诉你有多少常驻(在RAM中,而不是交换到交换文件,尚未分配或尚未需求 - 从一个映射文件加载),现在共享多少和什么。

我想你最好的选择是计算私人匿名记忆的数量,在某些情况下这可能是好的。

2

1)首先运行

ps -u <your user id> 

2)获取等你想从1个输出)来监视进程的PID

3)然后运行

top -p <the pid of the process you want to monitor> 
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查看内存占用量和当前堆栈相关性。

相关问题