Different Ways to Measure Memory - tenji/ks GitHub Wiki

Different Ways to Measure Memory

在 Linux 上,top命令可以提供查询几种不同的内存数据。以下是 Hello World 示例进程的内容:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2120 kgregory  20   0 4373m  15m 7152 S    0  0.2   0:00.10 java
  • VIRT 虚拟内存空间:虚拟内存映射中所有内容的总和(见下文)。这在很大程度上是毫无意义的,除非在特定场景下(见下文)。
  • RES 常驻集大小:当前驻留在RAM中的pages数量。 在几乎所有情况下,这是你说“太大”时应该使用的唯一数字。但它仍然不是一个很好的数字,特别是在谈论 JAVA 时。
  • SHR 与其他进程共享的常驻内存量。对于 JAVA 进程,这通常仅限于共享库和内存映射 JAR 文件。在这个例子中,我只有一个 JAVA 进程在运行,所以我怀疑这个 7k 是由 OS 使用的库的结果。
  • SWAP 默认情况下未打开,并且未在此处显示。 它指示当前驻留在磁盘上的虚拟内存量,无论它是否实际位于交换空间中。 操作系统非常适合将活动页面保存在RAM中,交换的唯一方法是(1)购买更多的内存,或(2)减少进程数量,因此最好忽略这个数字。

Windows 任务管理器稍微复杂一点。 在 Windows XP 下,任务管理器有内存使用虚拟内存大小这两列,但官方文档没有提及它们的含义。Windows Vista 和 Windows 7 的任务管理器中增加了更多的列,并且这些列的含义都有相关的文档说明。其中,工作集数据是最有用的,它大致对应于 Linux 上RESSHR的总和。

Understanding the Virtual Memory Map

When is Virtual Memory Size Important?

When is Resident Set Size Important?

Bottom Line

参考链接