Jul*_*ano 37
简而言之:
虚拟大小:是进程管理的地址空间量。虚拟地址空间包含进程可以通过指针(内存地址引用)访问的所有内容。例如,如果您的程序可以访问视频卡的帧缓冲区,则该内存将映射到进程虚拟空间并接收存储到指针的地址。内存映射文件和匿名映射也计入虚拟地址空间大小。几乎所有东西都在虚拟尺寸中。如果将 中列出的所有地址范围的大小相加/proc/<pid>/maps,它应该返回与虚拟大小大致相同的值。
驻留大小:是当前驻留在内存中的专门属于该进程的内存量。这意味着,不在交换中的内存量。请注意,即使进程正在运行,进程的某些部分也可以在交换内存中。当进程尝试访问它时,操作系统将从交换中拉出这些区域。这应该包括堆、所有线程的堆栈和其他私有映射。如果你在看/proc/<pid>/maps的[stack],[heap]和其他匿名映射(那些没有文件路径),要么交换或占驻地的大小。
共享大小:是可能属于多个进程的内存量。例如,如果您在内存中加载了同一个应用程序的四个实例,那么您将有四个堆实例和至少四个堆栈,每个进程一个(这是常驻内存),但您将只有一个实例程序及其库的二进制代码。这是共享空间。它不仅包括程序二进制代码及其库,还包括本地化文件、只读程序数据、SysV 和 POSIX 共享内存段、信号量等......如果你看一下/proc/<pid>/maps,大多数与库和程序文件相关的映射都是共享。
请注意,VIRT 包含 RSS 和 SHR 的并集,并且始终大于它们中的任何一个。可能存在同时被视为 RSS 和 SHR 的区域。
小智 6
在朱利亚诺的回答中:
请注意,RSS + SHR <= VIRT,始终如此。
这是错误的。SHR 包含可以与其他进程共享的所有虚拟内存,RSS 包含进程使用的 RAM 中的所有物理内存。
因此,当前在 RAM 中的所有共享内存都计入 SHR 和 RSS,因此 SHR + RSS 没有意义,因为它可以包含重复计数。
构建一个RSS+SHR>VIRT的进程,只需要mmap一个大文件(1GB),然后完整读取:mmaped文件会加载到RAM中,而VIRT、SHR和RSS都会略大于1GB,所以SHR + RSS > VIRT。
| 归档时间: |
|
| 查看次数: |
19823 次 |
| 最近记录: |