尽管负载很高,但 EC2 实例的空闲百分比仍然很高

尽管负载很高,但 EC2 实例的空闲百分比仍然很高

我喜欢完全加载我们的计算硬件以减少浪费的 CPU 时间,而在典型的内部硬件上,这相当容易:在机器上加载与内核一样多的可运行线程,空闲时间将变为零。

以下是一个示例应用程序:

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% 或更高。对于更复杂的程序(不是上面的示例),空闲时间甚至可能更高。

有人能解释一下吗?这是最新的 Amazon 内核,不包括被盗的 CPU 时间,我预计 EC2 上会出现这种情况。这是 EC2 特有的问题吗,还是 Xen 普遍存在的问题?有已知的解决方法吗?

答案1

通常,EC2 的空闲和窃取值看起来比裸机上的要高。由于虚拟化的工作方式,这在 EC2 上是正常的。在这种情况下,您可能不会丢失可用的 CPU 时间,因为这只是系统运行方式的产物。确保在检查 CPU 利用率时使用的是 Xen 感知版本的工具,该工具知道如何识别基于 Xen 的 VM 上的 CPU 时间。

相关内容