【VMware ESXi】使用 esxtop 杀死 ESXi 主机中卡死和不响应的虚拟机。

最近在家里的 Homelab 主机上进行 VMware Cloud Foundation 相关测试,由于 CPU 超负荷使用,某个别虚拟机时不时的会出现卡死和不响应等现象,进而导致了测试的失败并影响了相关实验的进度。比如,下图所示的嵌套 ESXi 虚拟机,本来运行好好的,由于资源不足,该虚拟机便出现了卡死和不响应问题,想着通过物理 ESXi 主机将该虚拟机强制关机并重新启动,但是在执行关机任务以后,结果这个任务也被卡住了!现在,无法通过 GUI 界面管理该虚拟机,也没法强行停止正在执行的任务,这样一来便形成了一个死局。尽管你可以在 ESXi 主机上使用 CLI 命令执行虚拟机的关机动作,比如 esxcli vm process、vim-cmd vmsvc/ 等,但是有时候可能并不始终有效,而我觉得另外一种方法也许更能受用,那就是使用 esxtop 命令。

通过 SSH 连接到 ESXi 主机,运行 esxtop 命令并进入交互式视图。

运行 esxtop 命令后,默认进入 c 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 主机再次查看虚拟机的状态,这个卡死不响应的虚拟机应该已经关机。