VirtualBox的内存使用情况如何工作?


38

我已经在VirtualBox上运行了多个VM,并且从各个角度报告了内存使用情况,但在确定VM实际使用多少内存时遇到了麻烦。这是一个例子:

  • 我的Windows XP主机上有一个运行Windows 7(作为来宾OS)的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时,主机OS的内存使用量约为2 GB
  • 当我关闭虚拟机时,主机操作系统的内存使用率下降到大约900 MB

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

另外,我想知道我是否使用1 GB的计算机运行,这是否要从主机OS占用1 GB的空间,或者仅是Guest计算机当前正在使用的内存量?

更新:

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

VirtualBox任务管理器


我想知道今天早些时候一次运行两个VBox VM时是否完全相同。
2009年

在任务管理器中,打开其他一些内存列(“视图”->“选择列...”)。Windows中以许多不同的方式对内存进行计数。例如,“提交大小”可以大大高于“内存使用率”。确切地使用哪个以及如何解释它们是另一回事。
lilbyrdie

可能重复的内容:superuser.com/q/17266/302
罗兰·肖

Answers:


12

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


OP似乎对分配的内容并不特别感兴趣,但正在询问使用的内容。因此,我不确定这与他的问题有何关系。
David Schwartz

12

要了解VirtualBox的流程体系结构,请参见
VirtualBox体系结构

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

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

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

基本记忆

这将设置VM运行时分配给VM的RAM数量。指定的内存量将从主机操作系统请求,因此在尝试启动VM时,必须在主机上可用或将其作为可用内存使用,并且在VM运行时对主机不可用。这是在“新建虚拟机”向导中指定的相同设置,如上面“创建虚拟机”一节中的准则所述。

这意味着访客退出了主机:

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

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

此外,VirtualBox可能不分配整个定义的VM内存,从而优化了内存使用。

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


8
它不是特定于VirtualBox的-请参阅:serverfault.com/questions/19935/…–
MartW

@harrymc,所以您要说的是任务管理器未在进程列表中显示虚拟框正在使用多少内存?
特雷弗·博伊德·史密斯

@TrevorBoydSmith:我要说的是,涉及多个过程,并且需要正确选择任务管理器中的列。
哈里奇2011年

2
我的虚拟机占用1.2 GB。在任务管理器上,它仅显示60MB。因此,因此我认为任务管理器不会显示我的虚拟机正在使用的所有内存。除非您能以某种方式向我展示如何调整任务管理器以显示1.2gb。
特雷弗·博伊德·史密斯

1
整个对话和所有答案只是虚拟内存和物理内存之间混乱的变体。
David Schwartz


2

您在TaskManager中看到的那些条目不适用于您的虚拟机,它们适用于VirtualBox GUI。“性能”选项卡将清楚地显示正在使用的总内存量,但不涉及进程的详细信息。我个人希望VBox仅使用所需的东西,但同意对它来说,能够按预期使用尽可能多的内容非常重要,因此是合理的。


1

可能与VirtualBox来宾添加有关。

据WinXP报告,我的Ubuntu安装当前使用的是〜20MB。这是与VBoxAdditions一起使用的。

据WinXP报告,我的Lubuntu安装当前正在使用约90MB。刚安装;VBoxAdditions尚未安装。

内存使用情况的确会因VM的操作而异。我的Ubuntu安装程序运行ziproxy。当我执行与ziproxy对话的操作时,随着VM的使用,内存使用量会激增几兆字节。

但是,总的来说,虚拟化已经发展到足够高的水平,因此不需要完全由主机分配对客户可见的规格。似乎要使用动态分配和强大的分页。


1

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

您正在查看主机上正在使用的内容,而不是正在分配的内容。来宾尚未使用主机RAM的400 MB以上(尚未)。

另外,我想知道我是否使用1 GB的计算机运行,这是否要从主机OS占用1 GB的空间,或者仅是Guest计算机当前正在使用的内存量?

它会保留1GB的RAM,但是实际上实际使用的内存可能要少得多。如果guest虚拟机不使用某些内存,则主机RAM可以用于许多其他目的(例如,缓存干净的磁盘页面),即使它是为guest虚拟机保留的。即使客户机确实使用了该内存中的某些,即使它访问的时间不够长,它仍然可以通过机会交换从物理内存中弹出。

不幸的是,您陷入了一个极其复杂的问题,并且需要花费大量页面才能真正对其进行解释。这个问题的答案中有很多不正确的信息。


0

您可以使用SysInternals的出色应用程序VMMap来查看它:

  1. 首先,您需要找到正确的过程,因此例如从Process HackerSysInternals的Process Explorer开始
  2. 将进程列表显示为树
  3. 找到该进程VBoxSVC.exeVBoxHeadless.exe如果VM正在运行,则它应具有几个子进程
  4. 如果正在运行多个VM,将有多个VBoxHeadless.exe进程分支,通过检查进程的命令行选择正确的分支,其中包含您的VM的标识符
  5. 您对VBoxHeadless.exe分支中的最低子节点感兴趣(即,它不再有子节点,只有父节点,所以是叶子),请记住其PID
  6. 启动VMMap
  7. VBoxHeadless.exe通过其PID 选择正确的进程,然后单击“确定”。

就我而言,VMMap 所报告的所有“ 专用字节”,“ 工作集”和“已承诺的内存”几乎与VirtualBox中分配给VM的内存量完全匹配。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.