您可能会留意到最近在Linux内核及某些工具如vmstat中,有一个新的CPU使用率的类别,名字叫stealing。这是什么意思呢?为什么您的CPU会被盗用?难道是外星人在我们的服务器上工作,恶意偷窃了CPU?嗯,还是…

CPU被盗用是一个新概念,与虚拟化和云计算有关。指的是当您的虚拟程序需要运行时,系统管理程序却不给您分配CPU周期,所以,您的虚拟 CPU周期被偷走给了别人,通常是给了另一个虚拟程序。

为什么会发生这种事呢?

您可能知道,系统管理程序(Xen及 VMWare等)控制硬件设备,决定如何给虚拟程序分配服务器物理CPU内核的CPU周期。若机器负载低,那么,只要不超过系统配置限制,每个虚拟程序都能获得所需的CPU。

通常情况下VM内核并不知晓此过程,而且在该过程中计算程序复杂,因为要涉及到虚拟 CPU的控制、限制和共享方式。但是,通常情况下,VM内核知道自己有多少个CPU核及其速度如何,以及什么叫100%负荷。

尽管CPU被盗用的情况不容易被发现,但是您应该知道有这种事件,因为它确实会使您受损失,可能您的CPU有50%的空闲资源而且处在一个较低的负荷均值上,但是可能实际上已经负载了,这是我们司空见惯的事情。此事发生时,服务器性能很差,用户也会很不高兴,所以,您应该知道有这回事,以及知道如何检测及处理这种事。

CPU被盗用在大型繁忙系统中以及在云中(有CPU上限,如AmazonEC2,尤其是当这些云中有小型实例的时候)是经常发生的事,大型的私云中也常发生此事。在此情况下,系统管理程序会挪走CPU周期。

但是在VM中,可能您会发现CPU使用率(user, nice, iowait)只有50%,还有50%是空闲的-看起来很好,是不是?尤其是当您使用一些过时的工具如top或者其它工具,因为这些工具不知道有CPU被盗用这回事,所以,系统根本无法察觉,但是系统资源被盗用的情况确实存在,只是你不知道而已。您的服务器看起来还有50%的空闲资源,但实际上已经过载了,运行的很慢。

要想发现这种情况,得采用一些新发布的工具如vmstat,它可以帮助您发现问题。

当您的CPU使用率持续维持在100%时,或者有明显的被盗用的迹象时(约大于10%),就表明您没有空闲的CPU资源了。您的负载还会有所增加,但是请不要以为您还没有达到“高”负载均值。例如,假设您有4个虚拟CPU,高负载均值可能是8+,但是若您被盗用了50%,就是一半的CPU资源被盗用了,那么负载均值如果是4的话,就已经是高负载了。

那么,您该如何处理此事呢?首先,请检查一下看您是否可以从管理程序/Dom0 这一层次上获取更多的资源,这事在私云中不难做到,但是在Amazon上就难以实现,除非您更新实例(做起来简单,但是很烧钱)。如果上面的方法不能实现,那么,您就得减少VM的负荷了,就是限制用户数量以及更改配置等。如果,两个方法都不行,那您就继续忍受被盗的痛苦吧,只要您心里有数,您的服务器事实上已经高负载了就行了。

从云计算及虚拟化角度来看,CPU被盗用是一个新的概念。可能您还不知情,就已经被盗用了,所以,采取合理的监控并对其有合理的理解是很重要的。有时,您能搞定此事,有时未必能搞定,但至少得知道有这回事,这就迈出了第一步。