最近在家裡的 Homelab 主機上進行 VMware Cloud Foundation 相關測試,由於 CPU 超負荷使用,某個別虛擬機器時不時的會出現卡死和不響應等現象,進而導致了測試的失敗並影響了相關實驗的進度。比如,下圖所示的巢狀 ESXi 虛擬機器,本來執行好好的,由於資源不足,該虛擬機器便出現了卡死和不響應問題,想著透過物理 ESXi 主機將該虛擬機器強制關機並重新啟動,但是在執行關機任務以後,結果這個任務也被卡住了!現在,無法透過 GUI 介面管理該虛擬機器,也沒法強行停止正在執行的任務,這樣一來便形成了一個死局。儘管你可以在 ESXi 主機上使用 CLI 命令執行虛擬機器的關機動作,比如 esxcli vm process、vim-cmd vmsvc/ 等,但是有時候可能並不始終有效,而我覺得另外一種方法也許更能受用,那就是使用 esxtop 命令。
透過 SSH 連線到 ESXi 主機,執行 esxtop
命令並進入互動式檢視。
執行 esxtop 命令後,預設進入 CPU 檢視,你可以隨時按 m
進入記憶體檢視,按 n
進入網路檢視,按 v
進入虛擬機器檢視。注意,在 esxtop 中互動式操作,對使用的大小寫字母具有不同功能,有關更多內容和注意細節請檢視《Performance Monitoring Utilities: resxtop and esxtop》產品文件。
預設在 CPU 檢視下,按 Shift + V
僅顯示 VM 虛擬機器。
從下圖中可以看到,在“%VMWAIT”列下,有一個異常的值非常高,根據這個可以判斷它就是那個卡死不響應的虛擬機器。
在上圖中,“NAME”列的名稱顯示不全,可以按 L
改變這一列顯示的長度,比如這裡輸入值 25 。
調整顯示的長度後,我們也可以透過名稱來確定出現卡死不響應的虛擬機器,如下圖所示。
此時,在上圖中按 f
或 F
後進入到以下檢視,用於在 CPU 檢視下增加一列資訊,按 c
或 C
選擇 “LWID” 項後按 Enter
回車儲存。
現在,在 CPU 檢視下多了一列 LWID 資訊,如下圖所示,我們需要記錄出現卡死不響應虛擬機器的 LWID。
然後,按 k
顯示 kill 執行選項,輸入卡死不響應虛擬機器的 LWID,比如下圖中的 2100101,按 Enter
回車殺死這個虛擬機器。
現在,卡死不響應的虛擬機器如果不在 CPU 檢視中,說明已被 kill 掉。
最後,登入 ESXi 主機再次檢視虛擬機器的狀態,這個卡死不響應的虛擬機器應該已經關機。