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 上RES
和SHR
的总和。