如何僅為 VM 保留 Hyper-V 2012 主機分區上的 RAM?
我有一種情況,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 的伺服器程序