CPU steal 时间是Linux中表示虚拟机就绪却遭hypervisor暂停而无法获得CPU的比例;在VMware中虚高常因调度策略或vmware-tools协作异常导致误报,非宿主机真实过载。
什么是 CPU steal 时间,它为什么在 VMware 中会虚高
CPU steal 时间(steal%)是 Linux top 或 vmstat 中的一个指标,表示虚拟机就绪但被 hypervisor 暂停、无法获得 CPU 时间的比例。关键点在于:它只反映“hypervisor 拒绝调度”的次数,并不区分原因——可能是宿主机真忙,也可能是 VMware 的调度策略或 vmware-tools 与内核协作异常导致的误报。
常见现象是:top 显示 steal% 长期 >20%,而宿主机 esxtop 的 %USED 和 %RDY 均很低(
vmware-tools 版本和 tsc clocksource 是核心变量
旧版 vmware-tools(尤其是 open-vm-tools idle% 或 sys% 的时间计入 steal%。
- 检查当前 clocksource:
cat /sys/devices/system/clocksource/clocksource0/current_clocksource—— 正常应为tsc,若为hpet或acpi_pm,说明 TSC 同步失败,steal 会显著偏高 - 升级
open-vm-tools到 11.3.5+(Ubuntu 22.04+/RHEL 8.6+ 自带)或手动安装最新版;闭源工具请至少到 12.4.0 - 强制启用 TSC(如 BIOS 支持):
echo 'tsc' | sudo tee /sys/devices/system/clocksource/clocksource0/current_clocksource(临时),并确认kernel.tsc=reliable在启动参数中
VMware 设置里几个容易被忽略的 CPU 相关选项
即使宿主机空闲,某些 VMware 配置也会触发不必要的 vCPU 抢占或调度延迟,间接抬高 steal 计数: