为什么 Windows 不能正确报告 VirtualBox 正在使用的 RAM?

为什么 Windows 不能正确报告 VirtualBox 正在使用的 RAM?

因此,出于好奇,我决定在运行 Windows 7 VM(分配了 3 GB RAM)的情况下查看我的 RAM 使用情况。看到结果我很惊讶,我想知道为什么这些结果是这样的:

我的主机(win 8.1)的任务管理器显示以下内容:主机进程浏览器

这实际上只能说明 Chrome 有多耗内存……无论如何,请注意 VirtualBox 管理器仅使用 75 MB 的 RAM。好吧,这很合理,毕竟这只是经理而不是虚拟机本身。但是等等,这些数字(即使你把你看不到的数字加起来)加起来还不等于当前的 RAM 使用量(性能选项卡中报告的 9 GB)。考虑到我的客户机现在使用了 1.5 GB,人们会认为它在列表中的位置会稍微高一点……

好的,让我们尝试一个不同的工具:内存地图

首先,再来两张来自 RAMMap 的截图:在此处输入图片描述 在此处输入图片描述

好吧,“进程私有”的那部分看起来大约有 3 GB(除非我粗略一看就错了一个数量级),但仍然 - 除了 Chrome 之外没有任何东西占用超过 100 MB 的 RAM。

哦,嘿,看看这个:在此处输入图片描述

看来我终于找到它在哪里了……但这是什么?VBox 是否将客户机的 RAM 视为一个文件,并将其一直加载到 RAM 中?这是……完全不同的东西吗?为什么 Windows 没有在其常规任务管理器工具中通知我这一点?

TL;DR:Windows,你没有显示所有 RAM 使用情况

答案1

它显示在 RAMMap 下驾驶员已锁定. 查看您分配给虚拟机的 3GB 的使用情况。

在此处输入图片描述

虚拟机使用此内存,以便其他工具无法使用它。

答案2

TL;DR:该进程正在使用内存,已停止使用内存,但 Windows 懒得处理它。

除非进程请求了 RAM 并对其使用情况有一定的控制权,否则 Windows 不会在任务管理器的进程下显示 RAM 使用情况。如果操作系统将 RAM 提供给进程以支持映射,并且这些映射是可丢弃的,则将它们显示为由进程占用会造成混淆。这会导致进程的使用量数字差异很大,因为其他进程导致这些映射不受支持。

您无需特别在意 Windows 恰好为该进程分配了 2GB 的 RAM,这不是因为它请求了,而是因为它想不出该内存有什么更好的用途。当然,如果 Windows 确实有其他用途,它可以随时收回该 RAM。

如果进程确实使用了内存,它将被视为其工作集的一部分并记入进程。如果 Windows 现在清理内存,而进程稍后使用了内存,Windows 就必须再次分配它。因此,现在做额外的工作是没有意义的,因为很可能以后会产生更多的工作。

相关内容