管理OpenVZ资源-CPU share篇
一、可设定参数
OpenVZ使用特定的运算规则计算CPU time,而设定值的单位就是CPU time。这就能避免单CPU和多CPU负载不平均,不能充分利用资源的问题。
可设定参数有:
cpuunits:VE可获得保证的最少CPU time资源;
cpulimit:该VE不允许超过的CPU time百分比。
正如开头提到的,cpuunits不是固定值,只要资源许可,在没有超过cpulimit百分比的情况下,VE可充分获取CPU资源。
二、设置CPU share
1、计算HW总的CPU time
第一步,当然是需要计算当前VPS 0(HW)有多少CPU time可以支配。
Current CPU utilization: 1000 #已由HW和启动的VE占用的CPU time
Power of the node: 85105 #HW的CPU time总数
2、HW可用CPU time
VE0CPUUNITS=1000
这是默认值,也等于没启动VE前,运行vzcpucheck得到的结果。
3、设置VE的CPU time
或者
CPUUNITS=”2500″
CPULIMIT=”5″
意思就是:
2)但在CPU空闲的情况下,115 VE并不能得到超过5%的CPU time资源;
3)也就是讲,正常情况下,115 VE可用的CPU time资源在3%~5%之间;
4)若不设置cpulimit,那么115 VE在没有其他VE竞争,而资源又允许的情况下,就可以超过3%,但只要不超过HW的负荷就可以了。
启动VE,结果:
# vzcpucheck
Current CPU utilization: 3500
Power of the node: 85105
该设置还是动态有效的:
Setting CPU limit: 5
Setting CPU units: 4000
Configure meminfo: 49152
Saved parameters for VE 115
# vzcpucheck
Current CPU utilization: 5000
Power of the node: 85105
4、问题
从上面的描述可以知道,OpenVZ通常用最少保证值来让VE可充分的利用系统资源,这是其设计原理之一。但由此会带来一个问题,就是:
# vzctl start 112
# vzcpucheck
Current CPU utilization: 105000
Power of the node: 85105
Warning: hardware node is overcommited
万一,你为所有VE设定的其最少保证可用CPU time资源总值大于HW实际的CPU time。那么,就可能会发生CPU过载的问题。当真正发生此情况的时候,115 VE就不能获得其原来保证可获得的3%的CPU time资源,由此可能会导致整个虚拟系统出错。
当然,这只会发生在112 VE完全使用CPU time,HW超负荷的情况下。而大部分情况下,VE占用CPU的高峰并非同时的,根据OpenVZ的动态分配原则,CPU time都可以获得比较充分的利用,所以,仅是Warning,而不是Error。但为了避免问题,建议还是让current CPU utilization等于power of the Node比较好。