如何在Linux中报告内存使用情况?

Modified on: Thu, 20 Jun 2019 13:20:02 +0800

使用ps,我可以看到大小,vsize(与top的VIRT相同?)和rss(与top的RES相同?)。 (我在顶部看到的另一个是SHR。)

有人可以总结一下这些不同领域的含义吗?

最佳答案

简而言之:

  • 虚拟大小:是进程管理的地址空间量。虚拟地址空间包含进程可以通过指针访问的所有内容(内存地址引用)。例如,如果您的程序可以访问视频卡的帧缓冲区,则该内存将映射到进程虚拟空间并接收存储到指针的地址。内存映射文件和匿名映射也计入虚拟地址空间大小。几乎所有东西都是虚拟大小。如果总结/proc/<pid>/maps中列出的所有地址范围的大小,它应该返回大致相同的虚拟大小值。

  • 驻留大小:是专门属于当前驻留在内存中的进程的内存量。这意味着,不在交换中的内存量。请注意,即使进程正在运行,部分进程也可以在交换内存中。当进程尝试访问它时,操作系统将从交换中提取这些区域。这应该包括堆,所有线程的堆栈和其他私有映射。如果你查看/proc/<pid>/maps[stack][heap]和其他匿名映射(那些没有文件路径)要么以常驻大小进行交换或计算。

  • 共享大小:是可能属于多个进程的内存量。例如,如果在内存中加载了相同应用程序的四个实例,则将有四个堆实例和至少四个堆栈,每个进程一个(这是驻留内存),但是您将只有一个实例程序的二进制代码及其库。这是共享空间。它不仅包括程序二进制代码及其库,还包括本地化文件,只读程序数据,SysV和POSIX共享内存段,信号量等...如果你查看/proc/<pid>/maps,大多数与库和程序文件绑定的映射都是共享的。

请注意,VIRT包含RSS和SHR的并集,并且始终大于其中任何一个。可能存在RSS和SHR的区域。

作者:,Juliano

相关问答

添加新评论