Linux用户态进程的内存管理( 二 )


 
内存的消耗VSS RSS PSS USS首先,我们评估一个进程的内存消耗都是指用户空间的内存,不包括内核空间的内存消耗。这里我们用工具 procrank先来看下Linux进程的内存占用量。

Linux用户态进程的内存管理

文章插图
  • VSS -Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
  • RSS -Resident Set Size 实际使用物理内存(包含共享库占用的内存)
  • PSS -Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
  • USS -Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
下面再用一张图来更好的解释VSS,RSS,PSS,USS之间的区别:
Linux用户态进程的内存管理

文章插图
有了对VSS,RSS,PSS,USS的了解,我们趁热打铁来看下内存在进程中是如何被瓜分的:
Linux用户态进程的内存管理

文章插图
(此图来源于宋宝华老师)
1044,1045,1054三个进程,每个进程都有一个页表,对应其虚拟地址如何向real memory上去转换 。
process 1044的1,2,3都在虚拟地址空间,所以其VSS=1+2+3 。
process 1044的4,5,6都在real memory上,所以其RSS=4+5+6 。
分析real memory的具体瓜分情况:
4 libc代码段,1044,1045,1054三个进程都使用了libc的代码段,被三个进程分享 。
5 bash shell的代码段,1044,1045都是bash shell,被两个进程分享 。
6 1044独占
所以,上图中4+5+6并不全是1044进程消耗的内存,因为4明显被3个进程指向,5明显被2个进程指向,衍生出了PSS(按比例计算的驻留内存)的概念 。进程1044的PSS为4/3 +5/2 +6 。
最后,进程1044独占且驻留的内存USS为 6 。
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
【部分内容整理于宋宝华老师课程】




推荐阅读