我已经见过几次了,我不明白发生了什么
我为 Windows 客户机分配了 200GB 的 RAM,并未保留。
现在查看客户机,操作系统显示其仅使用大约 2GB 的 RAM。
但是 ESXi 已为其分配了全部 200 GB 的 RAM(主机现在正在生成低内存警报)!Windows 仅使用 2 GB,那么为什么 ESXi 会为虚拟机分配全部 200 GB?
这是因为 Windows 要求的 RAM 比实际使用的多吗?我该如何解决此问题?
答案1
引自这里:
A host allocates the memory specified by the Limit parameter to each
virtual machine, **unless memory is overcommitted** (emphasis mine).
ESXi never allocates more memory to a virtual machine than its specified
physical memory size.
[...]
When memory is overcommitted, each virtual machine is allocated an
amount of memory somewhere between what is specified by Reservation
and what is specified by Limit. The amount of memory granted to a
virtual machine above its reservation usually varies with the current
memory load.
因此,除非主机需要比实际拥有的更多的内存来满足在其上运行的所有虚拟机的需求,否则它会很乐意为每个虚拟机分配它请求的所有内存,即使这些内存没有被保留;但是,如果发生过度使用,主机将回收部分内存,以便为其他虚拟机释放内存;在这种情况下,将回收与负载需求相同的内存,直到达到每个虚拟机的保留量。如果即使在将每个虚拟机的分配 RAM 降低到其保留量后,仍无法满足启动另一个虚拟机的内存要求,则不会启动该虚拟机。当然,如果虚拟机的内存被降低到其保留量,而这不足以使虚拟机正常运行,则会出现运行缓慢和/或错误。
假设您有 300 GB 的 RAM 和两台虚拟机,每台虚拟机的内存限制为 200 GB。启动第一台虚拟机时,它将获得全部 200 GB。启动第二台虚拟机时,主机将尝试满足这两个请求,但由于没有 400 GB 可用,因此它将稳定地为每个虚拟机提供 150 GB。然后,根据这些虚拟机的实际负载,内存可能会进一步移动:如果一台虚拟机尝试使用 180 GB,而另一台虚拟机占用 20 GB,则主机将把另外 30 GB 从第二台虚拟机移动到第一台虚拟机。
当然,如果两个虚拟机都尝试使用全部 200 GB,则主机将开始疯狂交换;这是添加更多 RAM 或将一个虚拟机移动到其他地方的线索。