虚拟机如何占用物理主机上如此少的RAM?


24

我在具有2GB RAM的Windows XP计算机上运行VirtualBox。我创建了一个虚拟Ubuntu计算机,并为其分配了750MB的基本内存。

为了进行测试,我在虚拟机上一次运行了20件事。根据ubuntu中的“ top”,正在使用750兆的内存以及相当大的交换空间。

但是,回到Windows Task Manager后,VitrualBox仅使用45,000K的内存。当我要求虚拟机执行更多操作时,VirtualBox进程的CPU使用率上升了(在Windows中),但是内存使用率却保持不变。

使用750 MB内存的虚拟机如何仅消耗物理机上的45 MB内存?

我认为答案是虚拟机没有使用实际内存,而是使用了模拟内存(即交换空间),但是它确实感觉很活泼,就像它在RAM中运行一样。

更新:我已经按照建议使用perfmon。即使总结我能想到的所有内容,它似乎仍然占用不到300兆……因此,这仍然是一个谜。

Process               VirtualBox     VirtualBox#1     Total
PoolNonpagedBytes     5,840          42,552           48,392
PoolPagedBytes        119,796        166,892          286,688
PrivateBytes          8,884,224      52,719,616       61,603,840
VirtualBytes          75,939,840     161,202,176      237,142,016
Sum                   84,949,700     214,131,236      299,080,936

Answers:


7

任务管理器中的列可能会误导您的数字-为了使每个进程准确使用内存,您可以使用perfmon(“控制面板”中的性能监视器)并查看“专用字节”数字。

为了显示这一点,请进入perfmon,单击以添加计数器(我是Ctrl+ I种人)。“性能对象”将是“进程”,“专用字节”在计数器列表中-显然,您需要从右侧列表中选择相关的进程。


你好 我尝试了此操作,但是没有找到所谓的“专用字节”的运气。您可以逐步介绍吗?
dggoldst,2009年

已添加...
罗兰·肖

谢谢,这是非常有帮助的。我已经将分析添加到了问题中。仍然不知道为什么它不等于750。
dggoldst,2009年

很奇怪。我可以指出,PrivateBytes是VirtualBytes的子集(虚拟字节是分配的地址空间的一部分,而专用字节是尚未释放的内存-您可以通过少量内存泄漏来获得内存碎片,并具有应用程序因内存不足而死,即使有足够的可用空间也是如此)。可能是虚拟化驱动程序正在分配内存,这意味着它不会显示出来,这是有道理的,因为内存应该可以免于分页到磁盘。
罗兰·肖

在表中放置的四个计数器中,只有“ PoolNonPagedBytes”是不可分页虚拟内存的计数,因此将使用物理内存量。其他全部都是虚拟的。像任何其他虚拟内存大小一样,它使用的实际RAM几乎总是少得多,这是虚拟内存的全部要点之一。
Jamie Hanrahan

5

在Linux下的某些虚拟化解决方案中,它们分配内存的方式使它在主机内核中显示为特殊的内存映射文件(与/proc/kcore特殊文件非常相似),因此它计入来自输出的“缓存”计数中free,而不是“已用”计数。

我认为Windows环境也会发生类似的情况:VirtualBox的管理进程将使用45Mb,分配给VM的750将在其他地方计算。


0

它可能是虚拟内存,内存映射文件或类似的东西。

您是否尝试过在任务管理器中显示其他列?


0

不要相信任务管理器。它看不到一切。

这个问题在SQL Server中更为常见,例如, 使用Sql,我从未发现有人告诉我从任务管理器中获取准确信息的方法,这使我相信该数字并未隐藏在其中一个中。其他列。

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.