Hyper-Vdynamic内存 – 虚拟机内存使用率和主机内存需求没有意义

我有一个Hyper-V 2012 R2服务器运行许多启用了dynamic内存的虚拟机。 他们都performance出这种行为,但这里是一个例子:

其中一个虚拟机是Windows Server 2012 R2的guest虚拟机,并没有太多的function。 基本上坐在那里空转。 它做了很多工作(它启动了一些分配了一堆内存的进程,使用了一些CPU,然后退出),但现在已经完成了。

VM中的任务pipe理器显示以下内存统计信息:

  • 在使用中:5.5 GB
  • 可用:302 MB
  • 承诺:5.6 / 6.9 GB
  • caching:299 MB

“内存组成”图表说,5629 MB是由应用程序,驱动程序等使用(即它不被用作文件系统caching)。 我也运行perfmon和那里的柜台排队与任务pipe理器。

切换到虚拟机内任务pipe理器中的进程列表,没有任何东西使用接近5 GB的内存。 把它们总结起来,低于1 GB。

有关更多信息,主机系统上的Hyper-Vpipe理器会显示此虚拟机已具有

  • 分配的内存:706 MB
  • 内存需求:593 MB

这与我通过总结VM中任务pipe理器中的进程列表获得的内存使用情况相符合。

所以问题是:

为什么我的虚拟机内部的任务pipe理器认为它使用了5.5 GB,当没有进程使用这个内存时,Hyper-V主机知道它只需要593 MB? 发生了什么?

您在构build虚拟机时安装的集成组件包括一个驱动程序,该驱动程序可以在不需要内存时从虚拟机中删除内存。 它删除它的方式是从guest OS中的内存pipe理器分配,然后将其返回到Hyper-V。 然后,从虚拟机内部看,因为它已被分配,所以它正在“正在使用”。 这通常被称为“膨胀”,大多数虚拟机pipe理程序可以做到这一点,甚至一些物理系统也使用硬件中的内存压缩引擎。