4. CPU性能问题诊断实战

CPU性能问题在虚拟化环境里往往不是“CPU不够快”这么简单。虚拟机看到的vCPU是物理核心的调度份额,中间隔着ESXi的CPU调度器、就绪队列、NUMA拓扑和资源池限制。同一台宿主机上,可能出现A虚拟机CPU使用率只有30%却卡顿,B虚拟机跑满100%却流畅的情况——差别就在就绪时间、争用和NUMA本地性这些“看不见”的指标上。本节围绕三类典型问题展开:CPU就绪时间高、CPU争用严重、NUMA跨节点访问,并给出esxtop、vCenter性能图表、vRealize Operations三件工具的组合诊断路径。

先理解三个核心指标的含义

CPU就绪时间(%RDY)表示虚拟机已就绪、等待物理CPU调度的时间占比。它反映的是“虚拟机想跑但排不上队”。经验阈值:单vCPU虚拟机持续超过5%、多vCPU虚拟机持续超过10%就值得关注;若达到20%以上,通常已能感知到明显卡顿。注意%RDY是相对单个vCPU的百分比,多vCPU虚拟机的%RDY会被放大,需要结合vCPU数量判断。

CPU争用(%CSTP,Co-Stop)只对多vCPU虚拟机有意义,表示虚拟机内某个vCPU已就绪、但因同一虚拟机的其他vCPU未同时被调度而被迫等待的时间。%CSTP高说明vCPU之间“步调不一致”,常见于vCPU数量超过物理核心可同时调度的场景。

NUMA跨节点访问不直接体现在%RDY上,而是通过内存访问延迟影响性能。当虚拟机的vCPU和内存被分散到不同NUMA节点,跨节点访问内存的延迟可能是本地访问的1.5~2倍。esxtop的NUMA相关字段和vRealize Operations的NUMA本地性指标可以暴露这一问题。

CPU性能问题诊断:三类典型症状与工具定位路径 三类典型症状 ① 就绪时间高 %RDY 持续 > 5%(单vCPU) %RDY 持续 > 10%(多vCPU) 表现:应用响应慢、CPU使用率不高 根因:物理CPU资源不足或调度排队 ② 争用严重 %CSTP 持续 > 3% 多vCPU虚拟机步调不一致 表现:多线程应用性能抖动 根因:vCPU数 > 物理核心可同时调度数 ③ NUMA跨节点访问 NUMA本地性 < 90% 跨节点内存延迟 1.5~2 倍 表现:内存密集型应用吞吐下降 根因:vCPU/内存跨NUMA节点分布 三件工具的分工 esxtop(实时/命令行) 按 c 进入CPU视图 按 f 添加 %RDY / %CSTP / NUMA 字段 按 V 切换虚拟机视图 优势:秒级粒度、字段最全 vCenter性能图表 集群/主机/虚拟机三级视图 就绪时间、争用、CPU使用率趋势 可回溯历史、对比多对象 优势:趋势分析、容量规划 vRealize Operations 智能告警、异常检测 NUMA本地性、就绪时间关联分析 优势:跨对象关联、根因定位 诊断路径 步骤1:vCenter看趋势 锁定问题时间段和受影响对象 步骤2:esxtop实时确认 看%RDY、%CSTP、NUMA字段 步骤3:判断症状类型 就绪/争用/NUMA 三选一或组合 步骤4:vROps关联根因 跨主机/集群/虚拟机关联分析 步骤5:验证与调整 调整vCPU数/资源池/DRS规则 观察指标是否回落至阈值内

用esxtop定位就绪时间高

esxtop是ESXi主机上最直接的实时诊断工具。SSH登录主机后执行esxtop,按c切换到CPU视图,按f打开字段选择,确保%RDY、%CSTP、%MLMTD、NUMA相关字段已显示。按V可以切换到虚拟机视图,只关注目标虚拟机。

观察时不要只看瞬时值,建议连续观察30~60秒。如果某虚拟机的%RDY持续在15%以上,同时宿主机物理CPU的%CORE UTIL(核心利用率)接近100%,说明物理CPU资源确实不足。此时可以按P按CPU使用率排序,找出消耗最大的虚拟机,判断是“个别虚拟机占用过多”还是“整体资源不足”。

一个常见误区是只看虚拟机的CPU使用率。假设一台8vCPU虚拟机CPU使用率只有40%,但%RDY高达25%,说明它虽然“不想跑满”,但每次想跑都要排队。这种情况下,减少vCPU数量反而可能降低%RDY——因为调度器需要同时找到8个物理核心的难度远大于2个。

用vCenter性能图表做趋势与对比

vCenter性能图表适合回答“什么时候开始出问题”和“哪些对象同时受影响”。在vSphere Client中选中集群→监控→性能→高级,添加“CPU就绪时间”和“CPU争用”指标,时间范围选最近24小时或7天。如果发现某台主机的就绪时间在每天上午9点后明显上升,而其他主机平稳,说明问题集中在单台主机,可能是该主机上虚拟机密度过高或存在“吵闹邻居”。

对比视图很有用:同时选中多台虚拟机,叠加显示它们的就绪时间曲线。如果只有一台虚拟机曲线突出,问题在它自身(vCPU过多或资源池限制);如果多台虚拟机同步上升,问题在宿主机或集群层面。vCenter图表还支持导出CSV,便于做容量分析。

用vRealize Operations做关联根因分析

vRealize Operations(vROps)的价值在于跨对象关联。当就绪时间告警触发时,vROps会自动关联同一主机、同一集群、同一数据存储上的其他异常指标。例如,它可能同时显示“主机CPU就绪时间高”和“该主机上某虚拟机NUMA本地性低”,帮助快速定位是NUMA问题而非单纯资源不足。

在vROps中,可以创建自定义仪表板,把“CPU就绪时间”“CPU争用”“NUMA本地性”“vCPU数量”放在同一视图中。对于NUMA问题,重点关注“NUMA本地性”指标,低于90%通常意味着跨节点访问比例偏高。vROps的“异常检测”功能还能在指标偏离基线时提前告警,而不是等到阈值被突破。

NUMA跨节点访问的识别与处理

NUMA问题的典型场景是:虚拟机vCPU数量超过单个NUMA节点的物理核心数。例如,一台双路服务器每个CPU有16个核心,共2个NUMA节点。如果创建一台24vCPU的虚拟机,它必然跨越两个NUMA节点,部分vCPU访问远端内存。此时即使%RDY不高,应用性能也可能下降。

识别方法:在esxtop中按m进入内存视图,查看NUMA相关字段;或在vROps中查看虚拟机的NUMA本地性。处理方式包括:将虚拟机vCPU数控制在单NUMA节点核心数以内;在虚拟机高级设置中配置numa.vcpu.preferHT或numa.nodeAffinity;或通过DRS规则将虚拟机绑定到特定主机组。需要注意的是,强制NUMA绑定可能降低DRS的调度灵活性,应权衡使用。

诊断口诀:先看vCenter趋势锁定范围,再用esxtop实时确认指标,最后用vROps关联根因。%RDY高看资源是否不足,%CSTP高看vCPU是否过多,NUMA本地性低看拓扑是否跨节点。三者可能同时出现,按“资源→调度→拓扑”的顺序逐层排查。

一个完整的诊断示例

假设某数据库虚拟机(8vCPU)在业务高峰期响应变慢。vCenter图表显示该虚拟机就绪时间从平时的2%升至18%,同时宿主机CPU使用率约75%。esxtop确认%RDY为17%,%CSTP为5%,NUMA本地性为82%。分析:宿主机CPU使用率75%不算饱和,但%RDY高说明调度排队;%CSTP为5%说明8个vCPU步调不一致;NUMA本地性82%说明存在跨节点访问。综合判断,问题不是物理CPU总量不足,而是该虚拟机vCPU过多导致调度困难和NUMA跨越。调整方案:将vCPU从8降至4,观察%RDY和NUMA本地性是否改善。调整后%RDY降至4%,NUMA本地性升至96%,应用响应恢复正常。这个示例说明,CPU性能诊断不能只看使用率,就绪时间、争用和NUMA本地性才是关键判据。