Xen虚拟机cpu负载过高性能问题


背景:

在Xen环境下,内存与CPU分配是可以动态改变的。通过动态更改内存与CPU分配,可以达到优化虚拟机性能的目的。

通常情况下,我们的虚拟机分配物理cpu的资源为自动分配的。当在一个物理机器上面分配多个虚拟机,并且虚拟机的cpu总和超过实际物理机器的cpu数量时,并且各个虚拟机在高负载的情况下,高负载的虚拟机会调用其他虚拟机器的资源

这次发现的问题是我们公司某系统新上线了三台虚机服务器,上线后发现,在流量是平均分配的前提下,新上的机器的负载比老机器高,新上的机器负载在8左右,而老机器的负载在4左右,查询了机器的配置和参数设置,新老机器都一样。后来通过iostat指令,发现新机票的steal值非常高,大于在40左右,而老机器的steal只有0.1左右。经与老大咨询,steal的值高会代表实体机的CPU负载高。后经由老大发现,新上线的三台虚拟机在一台实体机上,每个虚机分配了四个CPU,而实体机是个8CPU的服务器,导致了三个虚机之间征用CPU。(cpu要打开超线程!!!)

检查方法

1,检查系统状态

# iostat 1

avg-cpu: %user %nice %system %iowait %steal %idle
61.58 0.00 22.66 0.00 13.30 2.46

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

avg-cpu: %user %nice %system %iowait %steal %idle
58.77 0.00 23.70 0.00 17.54 0.00

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
xvda 8.49 0.00 520.75 0 552
xvda1 0.00 0.00 0.00 0 0

从这里我们可以看到 %steal 的值变化比较多,也就说明存在虚拟加之间在争用CPU的资源。

2. 检查各个虚拟机分配的CPU资源是否和物理机器的CPU资源一致。

解决方法

1. 如发现虚拟机的cpu资源(数量)大于物理机器的CPU资源。检查物理机器是否已经打开超线程,如果没有打开,需要打开。

2. 重启虚拟机后,检查资源是否还是解决。如果发现%steal 值恢复正常。问题解决。

附上一篇参考资料 

通俗一点来讲:把CPU比作人,那么没有超线程时这个人只用右手干活。有了超线程之后,左右手同时干不同的事情。在一定程度上提高了效率。

  • 1
  • 2
  • 下一页

相关内容