谁动了我的CPU?

您可以已经注意到了,最近Linux内核和某些特定工具(如vmstat)出现了一个新的表达CPU占用比率的概念叫做Stealing。这是什么意思呢,CPU怎么会被窃取呢?是我们服务器中有什么鬼在作怪,盗取CPU资源吗?好吧,某种程度上来说,是的…

CPU Stealing是一个相对新颖的概念,并直接与虚拟化和云计算相关。当您的虚拟机有活儿要干,但上层Hypervisor却决定不给你分配CPU资源时,就产生了CPUStealing。而其实就是这个CPU周期从你的虚拟机上拿走了,被分配给了其他人,通常是另一个虚拟机。

为什么要这么做呢?

您可能知道,Hypervisor(Xen、VMWare等)控制着硬件,并决定哪些虚拟机从服务器的物理CPU内核中获得CPU周期。如果机器负载没有那么高的话,每个虚拟机会获得足够配置比例的CPU。

通常情况下,虚机的内核并不会感知到这个过程,其背后也涉及复杂的算法,要看虚机CPU是如何在系统间被管控,限速和共享的。而通常虚机内核知道的是有多少CPU内核和其运转速度,以及CPU 100%了。

CPU Stealing需要引起注意,因为它可以在不经意间影响你的系统性能,通常的表现是,系统显示拥有50%闲置的CPU且系统负载较低,但你的服务器却已处于超载状态;这也是我们经常遇到的问题。当发生这个问题时,服务器性能会变得非常差,用户体验也会令人非常不满意,所以请务必对CPUStealing有所防范、包括如何察觉、以及如何处理此类情况。

CPUStealing问题在有CPU资源管控的繁忙系统和云计算平台上表现非常明显,如Amazon EC2(尤其是在Micro和Small 实例上)或者繁忙的私有云。这类系统上,Hypervisor正忙着拆东墙补西墙。

然而在虚拟机中,您可能看到CPU使用率(user、nice、iowait)仅为50%,并且有50%的闲置——这看起来完全没有问题,对吧?尤其是对于老一些工具(如top等)来说无法看到此情况,但你的CPU时间正被无情地蚕食着呢。你的服务器看起来有50%的闲置,实际情况上已经处于超载并且运行缓慢。

您需要使用新一些的工具(如最近发布的vmstat)来查看具体的CPUStealing情况。

当您的CPU始终处于100%占用时,且有严重的窃取(大于10%左右)意味着你的系统中没有闲置的CPU资源。您的平均负载可能会攀升,但是你需要打破传统的“高”负载的含义。举例说明,如果你有4个虚拟CPU,一般来说高负载的意思是Load Average高于8,但如果CPU被窃取了50%,Load Average为4时就已经算很高的了。

您可以做什么呢?第一步通常是查看能否从Hypervisor/Dom0层面上腾出来或者获得更多的服务器资源,这在私有云上是可行的,但在亚马逊云计算平台上就难了,除非你升级实例(简单,但成本较高)。如果做不到这点,则必须通过限制用户、调整配置等来降低虚拟机本身的负载。如果这两种办法都行不通的话,那只能估且先这样了,自己知道有CPU Stealing的情况发生且系统已过载。

CPUStealing在云计算和虚拟化领域是一个新概念。在不知不觉中影响你,所以对系统适当的监控和对其本身了解就显得很重要。能不能解决CPU Stealing问题确实不好说,但第一步得先对它有所了解。


Tags: Linux
Categories: Linux

发表评论

电子邮件地址不会被公开。 必填项已用*标注

* Copy This Password *

* Type Or Paste Password Here *