RSS是驻留集大小,用于显示分配给该进程的内存量,并且位于RAM中。它不包括换出的内存。它确实包括来自共享库的内存,只要这些库中的页面实际上在内存中。它确实包括所有堆栈和堆内存。
VSZ是虚拟内存大小。它包括进程可以访问的所有内存,包括被换出的内存,已分配但未使用的内存以及来自共享库的内存。
因此,如果进程A具有500K二进制文件并且链接到2500K共享库,则具有200K的堆栈/堆分配,其中100K实际上在内存中(其余是交换或未使用),并且它实际上只加载了1000K的共享库然后是400K自己的二进制文件:
RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K
由于部分内存是共享的,因此许多进程可能会使用它,因此如果将所有RSS值相加,您可以轻松获得比系统更多的空间。
在程序实际使用之前,分配的内存也可能不在RSS中。因此,如果你的程序预先分配了一堆内存,然后随着时间的推移使用它,你可以看到RSS上升,VSZ保持不变。
还有PSS(比例设定大小)。这是一种较新的度量,它将共享内存跟踪为当前进程使用的比例。因此,如果有两个进程使用之前的相同共享库:
PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K
线程都共享相同的地址空间,因此每个线程的RSS,VSZ和PSS与进程中的所有其他线程相同。使用ps或top在linux / unix中查看此信息。
除此之外还有更多方法,了解更多信息请查看以下参考资料:
http://manpages.ubuntu.com/manpages/en/man1/ps.1.html
https://web.archive.org/web/20120520221529/http://emilics.com/blog/article/mconsumption.html