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

背景:

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

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

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

检查方法

1,检查系统状态

# 1

avg-cpu: %user %nice % % % %idle

61.58 0.00 22.66 0.00 13.30 2.46

: tps /s /s

avg-cpu: %user %nice % % % %idle

58.77 0.00 23.70 0.00 17.54 0.00

: tps /s /s

xvda 8.49 0.00 520.75 0 552

0.00 0.00 0.00 0 0

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

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

解决方法

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

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