我有一个AWS 上的 m1.small EC2 实例运行一些网站。我注意到我的 CPU 使用率每隔一段时间就会达到峰值,恰好每 30 分钟一次(0:06、0:36、1:06,...)。
我检查了我的 cron(我有很多),但没有一个每 30 分钟运行一次。查看后top
我发现峰值大约持续 1 分钟,而且几乎全部由“被盗 CPU”(%st)。我读到过这是被 Amazon VM 虚拟机管理程序窃取的 CPU 时间,但我不明白为什么会发生这种情况(发生这种情况时我没有运行 CPU 密集型程序)以及为什么每 30 分钟就会发生一次。
你知道吗?我应该买一个更大的实例吗?我希望不需要,因为其余时间 CPU 非常低,平均负载 绝不超过 0.5...
答案1
根据 EC2 实例类型和底层硬件,您可能无需为访问所有底层 CPU 周期付费。如果您要求使用 m1.small(承诺相当于旧的、慢速的 CPU),Amazon 不会让您 100% 访问现代、快速的 CPU。
在 EC2 上,窃取并不取决于其他虚拟机邻居的活动。这只是 EC2 确保您获得的 CPU 周期不会超过您支付的费用的问题。
如果您的 m1.small 获得了底层更快 CPU 的 50%,那么对于您使用的每一位 CPU,您将看到另一个被标记为窃取的相等百分比。
如果 EC2 让您认为您真正可用的 CPU 是“100%”,而不是用您无权访问的其余 CPU 来戏弄您,然后在您尝试使用 CPU 时告诉您无法使用它,那就太好了,但这就是它在当前 VM 和主机设置下的工作方式。
m1.small 实例可能显示出较高的窃取百分比,因为它们能够访问的 CPU 有限,与底层硬件的 CPU 速度相比。
如果你担心这个特定的实例可能在 EC2 方面出现问题,你可以停止/启动它以将其移动到新硬件(我关于此的文章) 并查看是否有区别。当然,如果窃取百分比下降,则可能只是表明您已转向较慢的硬件 CPU。
至于每 30 分钟一次的活动,那是服务器上的软件。它可以是系统 cron 作业,也可以由守护进程(后台进程)触发。