Linux内存pipe理中的RSS和VSZ是什么?

Linux内存pipe理中的RSS和VSZ是什么? 在multithreading环境下,这两者如何pipe理和跟踪?

RSS是驻留集大小,用于显示分配给该进程的内存量,并在RAM中。 它不包括被换出的内存。 只要来自这些库的页面实际上在内存中,它就包含来自共享库的内存。 它包括所有堆栈和堆内存。

VSZ是虚拟内存大小。 它包括进程可以访问的所有内存,包括交换出来的内存和来自共享库的内存。

因此,如果进程A有一个500K的二进制文件,并链接到共享库2500K,则有200K的堆栈/堆分配,其中100K实际上在内存中(其余的被交换),并且实际上只加载了1000K的共享库和400K的它自己的二进制然后:

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

由于部分内存是共享的,因此许多进程可能会使用它,所以如果将所有的RSS值相加,则可能会比系统拥有更多的空间。

还有PSS(比例设定大小)。 这是一个较新的方法,它将共享内存作为当前进程使用的比例进行跟踪。 所以如果有两个进程使用前面的同一个共享库:

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

线程共享相同的地址空间,因此每个线程的RSS,VSZ和PSS与进程中的所有其他线程相同。 使用ps或top在linux / unix中查看这些信息。

有比这更多的方式,了解更多检查以下参考:

另请参阅:

  • 一种确定进程的“真实”内存使用情况的方法,即私人脏RSS?

RSS是驻留集大小(物理驻留内存 – 目前占用机器物理内存中的空间),而VSZ是虚拟内存大小(分配的地址空间 – 在进程的内存映射中分配了地址,但不一定背后的实际记忆现在)。

请注意,在这些常见虚拟机的日子里,从机器的angular度来看,物理内存可能并不是真正的物理内存。

我觉得已经说了很多,关于RSS VSZ。 从pipe理员/程序员/用户的angular度来看,当我devise/编写应用程序时,我更关心RSZ(驻留内存),因为当你不断拉动越来越多的variables(堆积)时,你会看到这个值正在上升。 尝试一个简单的程序在循环中构build基于malloc的空间分配,并确保在malloc'd空间中填充数据。 RSS继续向上移动。 就VSZ而言,它更多的是Linux所做的虚拟内存映射,而它的核心function之一就是从传统的操作系统概念中衍生出来的。 VSZpipe理是通过内核的虚拟内存pipe理完成的,关于VSZ的更多信息,请参阅Robert Love对mm_struct和vm_struct的描述,它们是内核中基本task_struct数据结构的一部分。

他们没有pipe理,但测量和可能有限(见getrlimit系统调用)。