我喜欢完全加载我们的计算硬件以减less浪费的CPU时间,而在典型的内部硬件上,这非常容易:加载的机器数量与内核数量相同,空闲时间将减less到零。
这里是一个示例应用程序:
public class Looper { public static void main(String[] args) { while (true) { new java.util.Random().nextBytes(new byte[4096]); } } }
在我们内部的8核硬件上,我可以运行8个这样的空闲时间(由mpstat和top报告)为零。 我甚至可以添加第9,第10等过程,空闲时间保持非常接近零。
然而,在EC2(c1.xlarge实例)上,空闲时间比我预期的要高得多。 在8个过程中,空闲时间在%1左右,而在9,10等过程中,可以增加到2%-3%或更高。 有了更复杂的程序(而不是上面的例子),空闲时间可能会比这更多。
任何人都可以解释吗? 这是非常新的亚马逊内核,不包括被盗的CPU时间,我期望看到EC2。 这是EC2的问题呢,还是对Xen来说呢? 有没有已知的解决方法?
通常与EC2的闲置和盗窃价值看起来比你在裸机上看到的要高。 由于虚拟化的工作原理,这在EC2上是正常的。 在这种情况下,您可能不会丢失可用的CPU时间,因为这只是系统function的一个人为因素。 确保在检查CPU利用率时,您正在使用该工具的Xen-aware版本,该工具明白如何识别基于Xen的VM上的CPU时间。