☰
ESXi 升级 U3 后 CPU Ready 偏高怎么办?一篇讲透电源策略 + 实操调优
2026/10/15 12:22:19 网站建设 项目流程
本文适用版本:ESXi 8.0 U1/U2 → U3 升级场景(7.0 U3 也有类似问题)
阅读时长:约 7 分钟
难度:⭐⭐(BIOS 改动需要重启,但 esxcli 改动不需要)

一、踩坑笔记:上周帮同事排查的"假慢"故障

📝 起因

上周四,隔壁组的小李端着咖啡过来:"张哥,我们组升级 ESXi 8.0 到 U3,业务部门反映系统慢,vSphere 里看 CPU Ready 一直在 8% 左右,你能帮忙看看不?"

我一看告警:"CPU Ready 高于 5%,VM 性能受影响"。这种问题他之前拖了两个月没修,业务投诉才来找我。

SSH 进去esxtop,看物理 CPU 的 C-State,好家伙,%C6 一路飙到 40%——CPU 在深度休眠被频繁唤醒,VM 等调度的时间自然就长。

解决方案其实就一行命令,但要把里面几个细节讲清楚,我还是写一篇文档,免得他下次升级又踩。

踩完坑顺便记一下,后面再有人问就直接甩链接。

二、原理:CPU Ready 到底是什么?为什么会高?

CPU Ready 时间(也称 "%RDY"):VM 等待物理 CPU 调度的时间百分比。

VM 发出 CPU 请求 │ ▼ ESXi CPU 调度器排队 │ ← 如果物理 CPU 正在深度休眠(C6/C7 状态), │ 从休眠唤醒需要 100~300 微秒, │ 这个等待时间就算进 "CPU Ready" ▼ 分配物理 CPU 执行

CPU Ready 的官方标准:

%RDY 范围健康度业务感知
< 2.5%🟢 优秀无感知
2.5%–5%🟡 良好无感知
5%–10%🟠 注意偶发卡顿
> 10%🔴 严重明显慢

U3 升级后变高的 3 个根因:

  1. 电源策略:U3 默认启用更激进的节能模式,C-State 更深,唤醒延迟更高
  2. NUMA 调度:U3 调整了 NUMA 节点权重,VM 跨 NUMA 调度变慢
  3. Turbo Boost:U3 在高负载时关闭部分核的 Turbo,整体调度被拉慢

三、3 步定位:确认是电源问题还是资源问题

# 第 1 步:看 CPU Ready 实际值 esxtop # 按 "v" 切换到 VM 视图 # 看 %RDY 列,识别哪些 VM 是元凶 # 第 2 步:看物理 CPU 的 C-State 占用 # 还是在 esxtop 里,按 "p" 切换到物理 CPU 视图 # 看 %C0 / %C1 / %C6 列 # 如果 %C6 高(>30%),说明 CPU 在深度休眠频繁唤醒 # 第 3 步:看当前电源策略 esxcli system settings advanced list -o /Power # 应该输出 /Power/CpuPolicy = "Balanced" 或 "High Performance"

结论对照表:

现象根因解法
%C6 高 + %RDY 高电源策略太激进改 High Performance
单台 VM %RDY 高,其他正常VM vCPU 过多降低 VM vCPU 数
所有 VM %RDY 都高主机 CPU 资源不足减 VM 数 / 加主机
NUMA 跨节点调度多VM 内存跨 NUMA绑 NUMA 节点

四、解法:从轻到重 4 档

方案 A:esxcli 改电源策略(最快,80% 有效)

# SSH 进 ESXi 改电源策略(立即生效,无需重启) esxcli system settings advanced set \ -o /Power/CpuPolicy \ -i "High Performance" # 验证 esxcli system settings advanced list -o /Power # 输出应该包含:Path: /Power/CpuPolicy, Config: High Performance

3 种策略对比:

策略节能性能适用场景
Power Saver🟢 强🔴 弱边缘节点
Balanced(默认)🟡 中🟡 中一般业务
High Performance🔴 弱🟢 强关键生产

方案 B:BIOS 里关闭 CPU 节能特性

BIOS 改完需要重启主机(影响 VM),建议维护窗口操作:

# Dell 服务器: # System Setup → System Profile → Custom # CPU Power Management → Disabled # C-State → Disabled # Turbo Boost → Enabled # Save → Exit # HPE 服务器: # BIOS/Platform Configuration → Power Management # HP Power Profile → Custom # HP Power Regulator → HP Static High Performance # Intel Turbo Boost → Enabled # Save → Exit # Lenovo 服务器: # System Settings → Power → Active Energy Manager # Mode → Disabled # Save → Exit

方案 C:调整 VM vCPU 数量

有时问题不在电源,而是 VM 自己 vCPU 给太多,超过物理核数反而拖慢调度。

# PowerCLI 找出所有 vCPU > 8 的 VM Get-VM | Where-Object { $_.NumCpu -gt 8 } | Select Name, NumCpu, MemoryGB | Format-Table -AutoSize # 批量调整(谨慎使用) Get-VM "DB-*" | ForEach-Object { $newCpu = [Math]::Min($_.NumCpu, 8) if ($newCpu -lt $_.NumCpu) { $spec = New-Object VMware.Vim.VirtualMachineConfigSpec $spec.NumCpu = $newCpu $_.ReconfigVM($spec) Write-Host "$($_.Name) vCPU: $($_.NumCpu) → $newCpu" } }

经验值:vCPU 数 ≤ 物理核数,且 VM 数 × vCPU ≤ 物理核数 × 0.7。

方案 D:绑定 NUMA 节点(进阶)

大内存 VM(>64GB)跨 NUMA 调度会显著拉高 %RDY,需要手动绑定:

# PowerCLI 绑定 NUMA 节点 Get-VM "DB-Heavy-01" | %{ $spec = New-Object VMware.Vim.VirtualMachineConfigSpec $spec.NumVirtualCoresPerSocket = 8 $spec.MemoryMB = $_.MemoryMB $spec.VirtualMachineConfigSpec = $null # 关键设置 $numaSpec = New-Object VMware.Vim.VirtualMachineConfigSpec $numaSpec.ExtraConfig = @( (New-Object VMware.Vim.OptionValue( 0, "numa.vcpu.preferHT", "false")) ) $_.ReconfigVM($numaSpec) }

五、防患于未然:3 个最佳实践

1. 升级后立即检查电源策略

ESXi 大版本升级(7.0→8.0)或小版本升级(8.0U1→U3)后,先把电源策略统一改成 High Performance,再观察一周。

# 批量给所有主机设置(走 vCenter) Get-VMHost | %{ (Get-View $_.ExtensionData).ReconfigureHost( (New-Object VMware.Vim.HostConfigSpec( (New-Object VMware.Vim.HostPowerSystemSpec("High Performance"))))) }

2. 监控 CPU Ready 趋势

# zabbix 自定义监控(5 分钟轮询) UserParameter=esxi.cpu.ready[*],/usr/bin/esxcli vm process list 2>/dev/null # 或者用 vCenter API 取 cpu.ready.summation # 告警阈值:%RDY > 5% 持续 30 分钟

3. VM 容量规划

每季度跑一次容量检查,确保所有 VM 的 vCPU 总量不超过物理核数的 70%。

# 容量检查脚本 Get-Cluster "Production-Cluster" | %{ $cpuTotal = ($_ | Get-VMHost | Measure-Object -Property CpuTotalMhz -Sum).Sum $cpuUsed = ($_ | Get-VM | Measure-Object -Property CpuUsageMhz -Sum).Sum $vCpuTotal = ($_ | Get-VM | Measure-Object -Property NumCpu -Sum).Sum $pCpuTotal = ($_ | Get-VMHost | Measure-Object -Property NumCpu -Sum).Sum Write-Host "CPU 整体使用率:[$(($cpuUsed/$cpuTotal*100).ToString('0.0'))%]" Write-Host "vCPU / pCPU:$vCpuTotal / $pCpuTotal" if ($vCpuTotal / $pCpuTotal -gt 0.7) { Write-Warning "⚠️ vCPU 已超 pCPU 的 70%,建议扩容" } }

六、速查命令卡(可收藏转发)

# 1. 核心修复(电源策略) esxcli system settings advanced set \ -o /Power/CpuPolicy -i "High Performance" # 2. esxtop 看 %RDY esxtop # 按 v 看 VM,按 p 看物理 CPU # 3. 看当前电源策略 esxcli system settings advanced list -o /Power # 4. BIOS 关闭节能(Dell 示例) # System Setup → System Profile → Custom # → CPU Power Management → Disabled # 5. 批量给所有主机设电源策略 Get-VMHost | %{ (Get-View $_.ExtensionData).ReconfigureHost( (New-Object VMware.Vim.HostConfigSpec( (New-Object VMware.Vim.HostPowerSystemSpec("High Performance"))))) } # 6. 容量检查 Get-Cluster | %{ /* 见正文 */ }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询