VirtualBox 的内存使用情况如何?

VirtualBox 的内存使用情况如何?

我已经使用 VirtualBox 运行了多个虚拟机,并且从各个角度报告了内存使用情况,但我不知道我的虚拟机实际使用了多少内存。以下是示例:

  • 我的 Windows XP 主机上有一个运行 Windows 7(作为客户操作系统)的虚拟机。
  • 主机有 3 GB 的 RAM
  • 客户虚拟机的基本内存设置为 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 内存
  • 运行虚拟机时,主机操作系统的内存使用量约为 2 GB
  • 当我关闭虚拟机时,主机操作系统的内存使用量会下降到大约 900 MB

显然,这里存在一些巨大的差异。我真的不明白 GuestOS 为何可以使用 400+ MB,而 Host OS 仅显示分配给 VM 的约 75 MB。VirtualBox 是否还使用了其他名称不那么明显的进程?

另外,我想知道如果我运行一台 1 GB 的机器,这是否会从我的主机操作系统中占用 1 GB,还是只占用客户机当前正在使用的内存量?

更新:

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

VirtualBox 任务管理器

答案1

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

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

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

至于记忆,用户手册状态:

基本内存

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

这意味着客人从主人那里拿走了:

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

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

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

根据需要分配内存是一种优化,可以节省大量物理内存,但是由于 VirtualBox 频繁需要请求更多主机内存,虚拟机中的内存密集型进程可能会变慢。

答案2

任务管理器中唯一似乎反映全部数量的地方是性能选项卡 - 总提交费用值大致与分配给虚拟机的数量保持一致。我刚刚关闭了一个分配了 1536MB 的虚拟机,提交费用从大约 2.4GB 降至 0.8GB。您可以使用性能监视器在一定程度上监控 Virtual Box 的这一情况,并选择 VirtualBox、VBoxSvc 以及 VirtualBox#1、#2 等(每个正在运行的虚拟机一个)的进程:专用字节计数器。还有用于所有内容的内存:已提交字节计数器。

答案3

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

使用 VMMap 之类的程序确实可以显示您指示 VBox 使用的内存确实正在使用。不知道为什么它在任务管理器或进程资源管理器中不可见。

答案4

你可以使用 SysInternals 的应用程序来查看它虚拟机地图

  1. 首先,你需要找到正确的流程,例如进程黑客或者SysInternals 的进程浏览器
  2. 以树的形式显示进程列表(通过单击进程列表中的“名称”列标题)
  3. 找到该进程,如果虚拟机正在运行,VBoxSVC.exe它应该有多个子进程VBoxHeadless.exe
  4. 如果多个虚拟机正在运行,则会有多个进程分支VBoxHeadless.exe,请通过检查进程的命令行选择正确的分支,它包含虚拟机的标识符
  5. 你对分支中最内层的部分感兴趣VBoxHeadless.exe(即它没有其他子节点,只有父节点,所以它是一片叶子),记住它的 PID
  6. 启动 VMMap
  7. VBoxHeadless.exe根据 PID选择正确的进程,然后单击“确定”

就我的情况而言,所有报告私有字节工作集坚定的VMMap 分配的内存几乎与 VirtualBox 中分配给虚拟机的内存量完全匹配。

相关内容