天天看點

虛拟伺服器記憶體怎麼檢查,VMware虛拟化平台記憶體如何管理?

當運作一個虛拟機時,vSphere的VMKernel為虛拟機生成一段可編址的連續記憶體,與普通作業系統提供給上層應用使用的記憶體具有相同的屬性特征。引入記憶體虛拟化之後,同樣的記憶體位址空間,允許VMkernel同時運作多個虛拟機并保證它們之間使用記憶體的獨立性。

虛拟化平台三種記憶體模式

主機實體記憶體(Host Physical Memory)

主機實體記憶體是ESXi在一個實體主機上檢測到的記憶體值,該值是主機實際實體安裝的記憶體值。

虛拟機實體記憶體(Guest Physical Memory)

虛拟機作業系統可以看到配置設定給虛拟機的記憶體值。

虛拟機虛拟記憶體(Guest Virtual Memory)

是指虛拟機作業系統配置設定給應用程式的可用記憶體,這是虛拟機作業系統映射到虛拟機實體記憶體的虛拟記憶體位址空間,是虛拟機作業系統提供給他的應用程式使用的記憶體位址空間,在非虛拟化環境中也是如此。

記憶體三種模式的工作方式

vmware vSphere的三層記憶體映射結構如下圖所示:

虛拟伺服器記憶體怎麼檢查,VMware虛拟化平台記憶體如何管理?

ESXi主機為其上運作的每個虛拟機建立一個虛拟記憶體位址空間,這些虛拟記憶體位址空間向下映射到主機記憶體位址,向上映射到虛拟機作為虛拟機的實體記憶體。當應用程式使用完後,虛拟機會将這部分記憶體标記為“free”,此時其他應用程式可以使用這部分記憶體,但是虛拟機管理器不會關心這些被标記為“free”的記憶體,并且認為這些記憶體一直配置設定給了虛拟機。也就是說,一旦管理程式将記憶體配置設定給一個虛拟機,它沒辦法分辨配置設定給虛拟機的記憶體是被虛拟機作業系統配置設定給了應用程式還是已經被釋放。是以當虛拟機的作業系統釋放虛拟機實體記憶體時,管理程式不能從虛拟機回收主機實體記憶體。下圖表示了這種屬性。

虛拟伺服器記憶體怎麼檢查,VMware虛拟化平台記憶體如何管理?

如果這樣的話,虛拟機會不會一直請求記憶體,但是一直不釋放,造成實體記憶體占滿的情況?其實是不會出現這種狀況的,當一個虛拟機配置設定的虛拟機實體記憶體已被完全占用時,管理程式不會再向虛拟機配置設定更多的實體主機記憶體,即使記憶體限制設定為無限制。

虛拟機的記憶體回收

記憶體配置設定容易回收難,因為記憶體回收的時候,管理程式必須必須保留足夠的實體主機記憶體來支援虛拟機實體記憶體配置設定和虛拟機運作的記憶體開銷。但是在日常工作中我們經常會遇到ESXi主機記憶體過量配置設定的情況,ESXi通過使用透明頁共享(Transparent PageSharing)、記憶體膨脹(Ballooning)、管理程式記憶體交換(hypervisor swapping)及記憶體壓縮(memory compression)等機制保證能使記憶體過量配置設定。

透明頁共享

當ESXi主機運作多個虛拟機時,這些虛拟機可能已加載相同的應用程式或元件,或者包含公用資料。使用透明頁共享技術可以消除記憶體頁的備援副本,隻保留一份,其餘的記憶體可以重新配置設定給其它虛拟機。

虛拟伺服器記憶體怎麼檢查,VMware虛拟化平台記憶體如何管理?

記憶體膨脹

如上所述,當虛拟機的客戶作業系統釋放記憶體時,ESXi不能簡單地回收主機實體記憶體頁,虛拟機作業系統也不知道ESXi主機記憶體的真實使用率。當ESXi主機記憶體處于壓力狀态時,主機可以通過記憶體膨脹機制來回收虛拟機的實體記憶體頁,觸發記憶體膨脹的驅動程式在安裝vmware tools的時候已經安裝在作業系統中,驅動程式的名稱為vmmemctl。

虛拟伺服器記憶體怎麼檢查,VMware虛拟化平台記憶體如何管理?

虛拟機作業系統記憶體膨脹

當主機的實體記憶體處于壓力狀态,主機需要從虛拟機中回收實體記憶體時,管理程式會給vmmemctl設定一個須達到的目标值,vmmemctl收到目标值後,虛拟機首先将被标記為“free”的記憶體“填充氣球”,如果這些被标記為“free”的記憶體不能滿足的情況下,可能觸發記憶體交換的情況,以達到需要回收目标值。最理想的狀态是,在不進行記憶體交換的情況下就能滿足目标值,這樣就不會影響虛拟機的性能。為了避免在進行記憶體交換的時候有可以交換的磁盤可用,是以在虛拟機進行配置時,要有足夠的交換空間。當然也可以設定限制可使用記憶體膨脹回收的記憶體量,甚至可以禁用記憶體膨脹,但是一般情況下不建議這樣做,因為記憶體膨脹是在保障虛拟機作業系統性能的情況下做出的選擇,要比其他方式溫柔的多,是以不建議禁用記憶體膨脹。

記憶體壓縮

記憶體壓縮就是指那些需要交換到磁盤的記憶體頁不進行磁盤交換而是進行壓縮,這種時候就是上面記憶體膨脹需要回收記憶體時,如果“free”記憶體不能滿足回收的目标值,虛拟機會将不會記憶體交換到磁盤,在交換到磁盤之前管理程式會判斷是進行壓縮對虛拟機性能影響小,還是進行交換對虛拟機性能影響小。并不是所有的記憶體都适合壓縮,如果一個記憶體頁壓縮比在50%以上,ESXi主機将會壓縮這些記憶體。如果記憶體頁壓縮比在50%以下,則會通過管理程式将記憶體交換到磁盤。

虛拟伺服器記憶體怎麼檢查,VMware虛拟化平台記憶體如何管理?

管理程式記憶體交換

當ESXi主機使用透明頁共享、記憶體膨脹、記憶體壓縮等機制都不能回收記憶體時,才會使用管理程式記憶體交換。在進行記憶體交換時,管理程式不會判斷虛拟機裡面哪些記憶體适合交換,也就是說它不會判斷頁面對于虛拟機的重要程度,是以會随機選擇記憶體頁面進行交換,這就會對虛拟機造成不可預知的影響,記憶體交換到磁盤稽核,也會嚴重影響虛拟機的性能。在ESXi5.5以上版本中可以設定SSD緩存交換,以較少對性能的影響。

虛拟伺服器記憶體怎麼檢查,VMware虛拟化平台記憶體如何管理?

使用什麼機制進行回收?

根據ESXi主機實際可用記憶體量的不同,ESXi有4種記憶體狀态,分别是High、Soft、Hard以及Low,具體定義閥值如下表:

可以使用esxtop指令檢視目前處于哪種狀态。

主機記憶體處于不同的狀态,會觸發相應的記憶體機制進行記憶體回收,具體如下表:

怎麼判斷是否存在性能瓶頸?

檢視記憶體的使用情況有很多種,你可以通過vSphere網頁用戶端進行檢視,可以通過使用VMware vRealize Operations Manager,也可以通過esxtop指令進行檢視。這裡簡單介紹下通過esxtop指令進行分析。

SSH登入到ESXi主機,然後輸入esxtop指令,輸入m進入記憶體頁面,預設5s中更新一次,可以使用s來更改更新間隔(輸入s會看到Secondsto delay: 輸入你想要的重新整理頻率,機關為秒,然後回車确認),可以使用f選擇要檢視的字段,具體詳細指令可以參考官方手冊,這裡隻介紹幾個比較重要的參數及判斷标準。

下圖是一個輸出截圖

PMEM/MB 顯示伺服器的計算機記憶體統計資訊

VMKMEM/MB 顯示ESXi VMkernel的計算記憶體統計資訊。這裡面要重點注意主機的記憶體狀态。當狀态為Soft的時候說明要關注記憶體情況,說明主機已經存在記憶體壓力。

PSHARE/MB 顯示ESXi頁共享資訊

SWAP/MB 顯示ESXi交換使用量統計資訊

r/s 由ESXi系統從磁盤換入記憶體的速率,如果該值大于0,主機實體記憶體量過量,主機嘗試回收記憶體,并且僅僅通過記憶體膨脹這機制無法滿足

w/s 由ESXi系統将記憶體交換到磁盤的速率,如果該值大于0,可能主機實體記憶體已嚴重不足

ZIP/MB 顯示ESXi記憶體壓縮統計資訊

ZIP/s 主機記憶體壓縮率,如果該值大于0,說明主機正在進行記憶體壓縮

UNZIP/s 如果該值大于0,那麼被壓縮的記憶體正在被主機或者虛拟機通路,此時将對虛拟機的性能造成影響。

本文從虛拟化平台虛拟機記憶體的運作機制,記憶體幾種回收機制以及在進行問題發現及診斷時需要注意的名額進行了分析。如果存在比較嚴重的記憶體問題,有可能對磁盤的性能也會造成影響。建議在平時工作中向虛拟機配置設定記憶體的時候按需配置設定,使記憶體發揮出最大性能。