最近在家里的 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 中交互式操作,对使用的大小写字母具有不同功能,有关更多内容和注意细节请查看产品文档。
默认在 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 主机再次查看虚拟机的状态,这个卡死不响应的虚拟机应该已经关机。