如何计算单个进程的实际内存使用量?我不是在谈论虚拟内存,因为它只是在不断增长。例如,有 proc 文件,如 smaps ,您可以在其中获取进程的映射。但这是虚拟内存,该文件的值只是在运行过程中不断增长。但我想反映一个进程的实际内存使用情况。例如。如果你绘制一个进程的内存使用情况,它应该代表内存的分配以及内存的释放。因此,情节应该像上下运动而不是线性函数,只是在运行过程中不断增长。
那么,我怎么能计算实际的内存使用量呢?我将不胜感激任何有用的答案。
答案 0 :(得分:3)
这实际上是一个复杂的问题。程序在操作系统级别的内存使用情况的两个最常见指标是虚拟大小和驻留集大小。 (这些列在ps -u
的输出中显示为VSZ
和RSS
列。)粗略地说,它们表示程序分配给它的总内存,而不是当前主动的内存量使用
进一步使问题变得复杂的是,当您使用malloc
(或C ++ new
运算符)来分配内存时,内存是从进程中的池中分配的,该池是偶尔请求分配的来自操作系统的内存。但是当你释放内存时,内存会回到这个池中,但通常不返回给操作系统。因此,当您的程序分配并释放内存时,您通常不会看到其内存占用量上下变化。 (但是,如果它释放了大量内存然后不再分配它,最终你可能会看到它的rs发生故障。)