VirtualBox 的内存使用是如何工作的?

DrF*_*son 41 memory virtualbox virtual-machine

我一直在使用 VirtualBox 运行多个 VM,并且从各个角度报告了内存使用情况,但我无法确定我的 VM 实际使用了多少内存。下面是一个例子:

  • 我的 Windows XP 主机上有一个运行 Windows 7(作为来宾操作系统)的 VM。
  • 主机有 3 GB 的 RAM
  • 来宾 VM 设置为具有 1 GB 的基本内存
  • 如果我在来宾操作系统上运行任务管理器,我会看到 430 MB 的内存使用量
  • 如果我在主机操作系统上运行任务管理器,我会看到 3 个似乎属于 VirtualBox 的进程:
    1. VirtualBox.exe (1),使用 60 MB 内存(这似乎是 CPU 使用率最高的)
    2. VirtualBox.exe (2),使用 20 MB 内存
    3. VBoxSvc.exe,使用 11.5 MB 内存
  • 运行 VM 时,Host OS 的内存使用量约为 2 GB
  • 当我关闭虚拟机时,主机操作系统的内存使用量会下降到大约 900 MB

很明显,这里有一些巨大的差异。我真的不明白 GuestOS 怎么可以使用 400+ MB,而 Host OS 只显示分配给 VM 的大约 75 MB。VirtualBox 使用的其他进程是否没有明显命名?

另外,我想知道我是否运行 1 GB 的机器,是否会从我的主机操作系统中占用 1 GB 的空间,或者仅占用客户机当前使用的内存量?

更新:

有人对我的内存使用量表示不信任,我不确定这种不信任是针对我还是我的主机操作系统的任务管理器的报告(这可能是罪魁祸首),但对于任何怀疑者,这里是这些过程的屏幕截图在主机上:

VirtualBox 任务管理器

har*_*ymc 13

要了解 VirtualBox 的进程架构,请参阅
VirtualBox 架构

从 GUI 启动虚拟机 (VM) 后,您将拥有两个窗口(主窗口和 VM),但正在运行三个进程。从任务管理器(在 Windows 上)或某些系统监视器(在 Linux 上)查看您的系统,您将看到以下内容:

  1. VirtualBox,主窗口的 GUI;
  2. 另一个以 -startvm 参数启动的 VirtualBox 进程,这意味着它的 GUI 进程充当 VM 的外壳;
  3. VBoxSVC,上面提到的服务,它在后台运行以跟踪所有涉及的进程。这是由第一个 GUI 进程自动启动的。

关于内存,用户手册指出:

基本内存

这设置了在运行时分配给 VM 的 RAM 量。将从主机操作系统请求指定数量的内存,因此在尝试启动 VM 时,它必须可用或作为主机上的空闲内存可用,并且在 VM 运行时主机不可用。这与在“新建虚拟机”向导中指定的设置相同,如上文“创建虚拟机”部分下的指南所述。

这意味着客人带出主机:

  • 与声明的内存一样多
  • 每个 VM 也是 VirtualBox 可执行文件,因此您需要添加其内存。

VirtualBox 手册总是有可能落后几个版本,并且没有记录最新的内存优化技术。

此外,VirtualBox 可能通过不分配整个定义的 VM 内存来优化内存使用。

根据需要分配内存是一种优化,可以节省大量物理内存,但是由于 VirtualBox 经常需要请求更多主机内存,VM 中的内存密集型进程可能会减慢速度。

  • 这不是 VirtualBox 特定的 - 请参阅:http://serverfault.com/questions/19935/virtual-machine-memory-usage-not-appearing-in-taskmanager (8认同)
  • 我的虚拟机占用 1.2 GB。在任务管理器上它只显示 60MB。所以因此我会声称任务管理器没有显示我的虚拟机正在使用的所有内存。除非你能以某种方式告诉我如何调整任务管理器以显示 1.2gb。 (2认同)

Mar*_*rtW 12

任务管理器中似乎反映全部金额的唯一地方是在性能选项卡上 - 总提交费用值大致与分配给 VM 的金额保持同步。我刚刚关闭了一个分配了 1536MB 的空间,提交费用从大约 2.4GB 下降到了 0.8GB。您可以使用性能监视器在某种程度上针对 Virtual Box 进行监控,并选择进程:VirtualBox、VBoxSvc 以及 VirtualBox#1、#2 等的专用字节计数器(每个运行的 VM 一个)。还有适用于所有内容的 Memory : Committed Bytes 计数器。


小智 5

这看起来是 Windows 问题。在此处查看第三篇文章:http : //forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html

使用像 VMMap 这样的程序确实表明你告诉 VBox 使用的内存实际上正在被使用。不知道为什么它对任务管理器或流程浏览器不可见。