Linux 内存管理中的 RSS 和 VSZ 是什么意思?

0.383字数 478阅读 19538

RSS 是常驻内存集(Resident Set Size),表示该进程分配的内存大小。

RSS 不包括进入交换分区的内存。

RSS 包括共享库占用的内存(只要共享库在内存中)

RSS 包括所有分配的栈内存和堆内存。

VSZ 表示进程分配的虚拟内存。

VSZ 包括进程可以访问的所有内存,包括进入交换分区的内容,以及共享库占用的内存。

如果一个进程,程序的大小有 500K,链接的共享库大小有 2500K,堆栈内存共有 200K,其中 100K 进入了交换分区。

进程实际加载了共享库中的 1000K 的内容,以及自己程序的中的 400K 的内容。请问 RSS 和 VSZ 应是多少?

RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K

RSS 中有一部分来自共享库,而共享库可能被许多进程使用,所以如果把所有进程的 RSS 加起来,可能比系统内存还要大。

有一个较新的参数 PSS (proportional set size),它对于共享内存的计算与 RSS 不同。参考前面的例子,如果有两个进程使用同一个共享库,那么:

PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K

线程共享同一个地址空间,所以一个进程内部的所有线程有相同的 RSS, VSZ 和 PSS。可使用 ps 或者 top 命令观察这些信息。

There is way more to it than this, to learn more check the following references:

http://manpages.ubuntu.com/manpages/en/man1/ps.1.html
https://web.archive.org/web/20120520221529/http://emilics.com/blog/article/mconsumption.html

Also see:

https://stackoverflow.com/questions/118307/a-way-to-determine-a-processs-real-memory-usage-i-e-private-dirty-rss

原文连接:
https://stackoverflow.com/questions/7880784/what-is-rss-and-vsz-in-linux-memory-management

推荐阅读更多精彩内容