我遇到过一种情况,Hyper-V 2012 集群节点无法支持 2 个虚拟机,而我认为它应该可以。目前,我正在使用 96GB RAM,我想运行 2 个 47GB 的虚拟机(静态 RAM)。这样主机就剩下 2GB,这应该足够了。但是,我无法运行第二台虚拟机,因为软件抱怨没有足够的内存。
接下来,我将每个虚拟机的内存减少到 46GB,但仍然无法支持 2 个虚拟机。从节点运行“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 群集并不重要。主机是否加入域并不重要。主机上运行着多少个虚拟机(或这些虚拟机消耗了多少 RAM)也不重要。最后,我认为这也是 2012r1 的行为,因为当 2012r2 主机都是 2012r1 时,我就出现了这些症状。
在所有情况下,我发现将已安装的 RAM 数量(以 GB 为单位)乘以 0.0425 即可知道非分页池中丢失了多少 RAM(以 GB 为单位)。(这是非常接近估计。)
因此,直到微软修复他们的软件,或正式承认这种行为是设计使然之前,答案是使用每个人都常用的计算方法(如下面的答案所示),然后添加上述计算的结果来解释你将因非分页池而丢失的 RAM。(或者,如果您愿意,我在这里有一个带有示例的摘要。)
PS:我觉得需要注意的是,我一直在写“GB”,但我只是使用 Windows 报告的内容。Windows 和 RAMMap 报告的数字不是 GB/KB,而是 GiB/KiB,因此将非分页池计算的结果乘以 1024,以将其与 RAMMap 报告的“K”数字进行比较。
答案1
300 MB 用于虚拟机管理程序,32 MB 用于分配给每个虚拟机的第一个 GB RAM,另外每个分配给每个虚拟机的额外 GB RAM 需要 8 MB,再加上 512 MB 用于在根分区上运行的主机操作系统
一般来说,计划为根分区分配至少 512 MB 内存,以提供 I/O 虚拟化、快照文件支持和子分区管理等服务。
第一个虚拟机需要 300+32+(45*8)=692MB
对于两个虚拟机来说,692+32+(45*8)=1084
1084+512=1596MB 总核算经验法则
因此,这只是虚拟机管理程序的消耗。现在考虑到,即使配置了第一个虚拟机,您也使用了超过 5 GB 的内存。我建议查看命令提示符中的 tasklist 输出,并查找消耗 RAM 的服务器进程