linux中top命令 VSS,RSS,PSS,USS 四个内存字段的解读。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31588719/article/details/89476050

我们在查看一台linux机器(包括android设备)cpu,内存使用情况的时候,top命令很边界且明了。它会列出对应的进程的CPU,VSS,RSS,PSS,USS的使用情况,这四种形式首字母分别是Virtual/Resident/Proportional/Unique的意思,这对我们察觉内存泄漏很有帮助,我们来解读一下这四个字段意思。

下面这段话是从国外网站搬过来的解释:


Android有一个名为  procrank  (/ system / xbin / procrank)的工具,它按从高到低的顺序列出了Linux进程的内存使用情况。每个过程报告的大小是VSS,RSS,PSS和USS。

为了本说明书的简单起见,存储器将以页面而不是字节表示。像我们这样的Linux系统在最低级别管理4096字节页面的内存。

VSS  (从ps报告为VSZ)是  进程的总可访问地址空间。此大小还包括可能不驻留在RAM中的内存,如已分配但未写入的malloc。VSS几乎没有用于确定进程的实际内存使用情况。

RSS  是 进程RAM中实际保存总内存。RSS可能会产生误导,因为它报告了该进程使用的所有共享库的总数,即使共享库仅加载到内存中一次,无论有多少进程使用它。RSS不能准确表示单个进程的内存使用情况。

PSS  与RSS的不同之处在于它报告其共享库的比例大小,即如果三个进程都使用具有30个页面的共享库,则该库将仅向为三个进程中的每个进程报告的PSS贡献10个页面。PSS是一个非常有用的数字,因为当系统中所有进程的PSS相加时,这是系统中总内存使用量的良好表示。当进程被终止时,为其PSS贡献的共享库将按比例分配给仍在使用该库的其余进程的PSS总计。这样,PSS可能会产生一些误导,因为当一个进程被终止时,PSS无法准确地表示返回整个系统的内存。

USS  是  进程的总私有内存,即该进程完全独特的内存。USS是一个非常有用的数字,因为它表示运行特定进程的真正增量成本。当进程被终止时,USS是实际返回给系统的总内存。当最初怀疑某个进程中的内存泄漏时,USS是最好的数字。


虽然描述的很精确,但是理解起来有点难,再进一步解读,将这四个字段描述概括为:

VSS : Virtual Set Size 虚拟耗用内存(包含共享库占用的内存),即单个进程全部可访问的地址空间,其大小可能包括还尚未在内存中驻留的部分。对于确定单个进程实际内存使用大小,VSS用处不大。
RSS : Resident Set Size 实际使用物理内存(包含共享库占用的内存),即单个进程实际占用的内存大小,RSS不太准确的地方在于它包括该进程所使用共享库全部内存大小。对于一个共享库,可能被多个进程使用,实际该共享库只会被装入内存一次。
PSS : Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)PSS相对于RSS计算共享库内存大小是按比例的。N个进程共享,该库对PSS大小的贡献只有1/N。
USS : Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)即单个进程私有的内存大小,即该进程独占的内存部分。USS揭示了运行一个特定进程在的真实内存增量大小。如果进程终止,USS就是实际被返还给系统的内存大小。

所以,一般情况下有:VSS >= RSS >= PSS >= USS。


什么?你还是不能理解?那我在给你画张图来给你看:

现在是不是懂了?同学们,下课!

 

猜你喜欢

转载自blog.csdn.net/qq_31588719/article/details/89476050