我有一种情况,Hyper-V 2012 群集节点在我认为应该支持 2 个虚拟机时却无法支持。目前,我正在使用 96GB RAM,并且我希望运行 2 个 47GB 虚拟机(静态 RAM)。这为主机留下了 2GB 的空间,这应该足够了。但是,我无法运行第二个 VM,因为该软件抱怨没有足够的内存供它使用。
接下来,我将每个 VM 减少到 46GB,但它仍然不支持 2 个 VM。从节点运行“taskmgr”,它报告“正在使用”51GB,“44.9GB”可用。我不明白为什么 46GB 的虚拟机会在主机分区中产生 5GB 的开销。查看正在运行的进程,列出的 RAM 加起来不到 500MB。
我想告诉 Hyper-V 明确保留除 2GB 以外的所有空间,仅用于 VM 使用。
此外,最好知道为什么管理程序“需要”5GB。有没有办法告诉 Hyper-V 在内部使用 RAM 做什么?或者 Hyper-V 2012 是否有关于主机实际需要多少 RAM 的新计算(因为 2GB 并没有削减它)?
编辑 - 2014-02-14
在查看了 4 个不同的 Hyper-V Server 2012r2 主机和一个 2008r2 之后,非分页池随着物理安装的 RAM 线性增长。CPU是AMD还是Intel都没关系。主机是否是 Windows 集群的一部分并不重要。主机是否加入域并不重要。主机上运行了多少虚拟机(或者这些虚拟机消耗了多少内存)并不重要。最后,我认为这也是 2012r1 的行为,因为当 2012r2 主机都是 2012r1 时,我有这些症状。
在所有情况下,我发现将已安装 RAM(以 GB 为单位)的数量乘以 0.0425 将告诉您有多少 RAM(以 GB 为单位)丢失到非分页池中。(这是一个非常接近的估计。)
所以直到微软修复他们的软件,或者正式承认这种行为是设计的,答案是使用每个人常用的计算(如下面的答案所示),然后加上上述计算的结果来解释您将失去非分页池的 RAM。(或者,如果您愿意,我在这里有一个带有示例的摘要。)
PS:我觉得重要的是要注意我一直在写“GB”,但我只是使用 Windows 报告的内容。Windows 和 RAMMap 报告的数字不是 GB/KB,实际上是 GiB/KiB,因此将 Nonpaged Pool 计算的结果乘以 1024 与 RAMMap 报告的“K”数进行比较。
资源
300 MB 用于 Hypervisor,32 MB 用于分配给每个虚拟机的第一 GB RAM,另外 8 MB 用于分配给每个虚拟机的每额外 GB RAM,另外 512 MB 用于在根分区上运行的主机操作系统
作为一般经验法则,计划为根分区分配至少 512 MB 内存,以提供 I/O 虚拟化、快照文件支持和子分区管理等服务。
300+32+(45*8)=692MB 对于第一个虚拟机
两个虚拟机的 692+32+(45*8)=1084
1084+512=1596MB 总占经验法则
所以这只是管理程序的消耗。现在考虑到即使配置了第一个 VM,您也使用了超过 5 GB 的空间。我建议在命令提示符下查看任务列表的输出并查找消耗 RAM 的服务器进程