上個星期病了一場,原先以為只是小感冒,想不到竟然過了 6 天才好。印象中以前感冒到病癒不會超過 3 天的,看來真的老了 -_- 。廢話不多說,本月教學文來談一下 VM 的 overhead memory。
是否有遇到過 VM 因資源不足無法開機的情形呢? 首先你該想到的是 Reservation 的問題。如果我們針對 VM 設定了 memory reservation,代表為此 VM 給了保留值,一旦它開機起來,一定至少會享有專程為它保留的記憶體。也就是說,這一段是它不須要跟其他 VM 來競爭的獨享資源,例如給 VM memory reservation 設定 500MB 的話,那麼保證它開機起來,至少會有 500MB 這麼多可以使用。如果這個時候實體記憶體沒有這麼多,不夠分了怎麼辦? 那你這個 VM 就無法開機,因為既然沒辦法保證能給你這麼多,那乾脆就不讓你開機。
你會問,如果我一定要開機怎麼辦? 很簡單,取消或降低 memory reservation 至實體記憶體目前所擁有的以下,讓它加入與其他 VM 的分配競爭,就可以開機了。但是,不保證你可以拿到多少記憶體,因為大家一起競爭資源,變異性就大,依照彼此間的閒置時刻以及 shares 值分配而有所不同,保證可以開機,但不保證效能。
不過有時候明明沒有設定保留值,記憶體資源也還有剩,但 VM 就是不能 power on,那是怎麼一回事?
其實許多人都沒有注意到,除了該 VM 本身的記憶體配置,還有其它額外開銷的部份。假設今天你給了一個 Virtual Machine 4 vCPU 以及 8GB vRAM,當你要啟動 VM 的時候,需要靜態的記憶體開銷 413.91MB,如果此時 ESXi host 的實體記憶體剩下不到 400MB,很抱歉,VM 此時就不能 power on。
沒錯,VM 能不能開機的關鍵,不在於實體資源有沒有 8GB 的 RAM (這個部份可透過 memory overcommit 解決),而是在於能不能滿足 memory reservation 以及 memory overhead 所需。每個 VM 都會有 memory overhead 需求,開機前為靜態數值,開機後 overhead memory 會變動。並且,此數值會依照 ESX / ESXi host 的 實體 CPU 數量、Guest OS 的 hardware version 也會有所不同。vCPU、vRAM 給的越多,VM 的 overhead memory 越大,以 ESXi 5 / 8 vCPU / 256GB 的 VM 為例,需要 10GB 的記憶體開銷,也就是說當這個 VM 要開機,此時 host 所剩的記憶體至少要有 10GB 才行。
在 ESXi 5 下的一般性 VM memory 配置開銷,請參考 overhead memory list
Memory Overhead 補圖 :
留言列表