虚拟化资源争抢核心是资源分配公平性与及时性,而非单纯负载高低;需通过%ready time>5%、memory pressure>70、qued积压、davg/cmd超阈值及ha排队等信号精准识别cpu、内存、存储io和调度四类争抢。

CPU争抢:重点看%Ready Time
虚拟机明明有活干,却迟迟得不到物理CPU执行时间,本质是vCPU排队等待。
- 在Hyper-V中,运行:
Get-Counter 'Hyper-V Hypervisor Virtual Processor(*)% Ready Time' -SampleInterval 5 -MaxSamples 60 | ForEach-Object {$_.CounterSamples} | Group-Object Path | ForEach-Object { [PSCustomObject]@{ VM = ($_.Name -split '\')[3]; AvgReadyTime = ($_.Group.CookedValue | Measure-Object -Average).Average } } | Sort-Object AvgReadyTime -Descending
若某VM平均%Ready Time持续>5%,尤其>10%,说明宿主机CPU已成瓶颈,不是VM自身忙,而是没轮上。 - 在VMware中,用esxtop(按c进入CPU视图),关注RDY列:单个vCPU RDY%>10%即需警惕;整体集群RDY均值高,说明物理核心过载或vCPU配置过多(如4vCPU配给2核主机)。
内存争抢:别只看使用率,盯住Memory Pressure
内存使用率80%未必有问题,但Memory Pressure频繁冲到70以上,大概率正在发生隐性争抢。
- 先启用计量:
Enable-VMResourceMetering -VMName "YourVM" - 再查压力值:
Get-VMResourceMetering -VMName "YourVM" | Select-Object VMName, MemoryPressure
压力值长期<5:宽松;波动大且峰值>70:宿主机内存紧张,可能触发balloon收缩或交换,应用响应变慢。 - VMware中对应指标是MCTLSZ(balloon驱动已回收内存量)和SWAP(交换页数),esxtop按m键查看,MCTLSZ持续增长+SWAP非零,就是内存争抢实锤。
存储IO争抢:从队列深度和延迟双维度判断
HA故障转移后VM启动慢,常因多台VM同时读取模板/磁盘,打满存储队列。
- 检查存储队列深度(ESXi):
esxtop → 按u进入storage视图 → 关注QUED(当前队列请求数)。若持续>2–4(取决于存储类型),说明IO请求积压。 - 观察延迟:
同一视图下看DAVG/cmd(设备平均延迟,毫秒级)。SSD应<10ms,HDD<20ms;若>50ms且伴随QUED升高,基本确定是存储层争抢。 - Hyper-V中可用性能计数器:
Hyper-V Virtual Storage Device(*)Avg. sec/Read 和 Avg. sec/Write,持续>0.03秒需介入。
调度与资源分配争抢:DRS失灵与HA排队的共性根源
VM全挤在一台主机、HA重启时大量VM卡在“等待资源”,表面是功能异常,根因往往是资源分配策略冲突。
- 查DRS是否真在工作:
vSphere Client → 集群 → Monitor → DRS → DRS Recommendations。若长期无建议,优先检查迁移阈值(设为1太保守)、VM-Host亲和规则(旧规则未清理)。 - 查HA重启排队原因:
主机故障后,进vCenter → Hosts and Clusters → 查看故障主机上VM状态,若显示“Waiting for HA resources”,说明剩余主机内存/CPU余量不足,或重启优先级档位太多(如设了高/中/低/紧急/备份共5档),HA强制串行启动。 - 快速验证资源余量:
进入集群摘要页 → 查看“Total Capacity”与“Used Capacity”差值。内存余量<15%、CPU余量<20%,HA转移时必然排队。











