AWS EC2高CPU警报触发

22

我有一个运行Windows 2008 R2的微型EC2实例。最近我一直收到很多高CPU警报,当我登录AWS管理控制台时,我发现我的CPU几乎达到了100%。但是,如果我登录实例并打开任务管理器,我的CPU看起来几乎处于空闲状态。我已经让任务管理器保持打开状态一段时间,并拍了这张截图,显示了AWS报告和我的实例看起来在做什么之间的差异。有什么建议吗?

CPU使用率图表 (https://s3.amazonaws.com/caskerdbbucket/public/cpu.png)

PS:任务管理器的更新速度设置为“低”


我在一个t1.micro的Linux实例上看到了同样的情况。 - Molomby
随着t2实例的发布,这个问题可能已经基本消失了,因为我们可以更清楚地看到何时可能会被限流。 - Ryan Caskey
2个回答

36
在像Amazon EC2这样的虚拟化环境中,操作系统所暴露的数据通常是不充分或误导性的,并且报告的百分比取决于您的实例类型和底层处理器核心利用率(这通常与您从超级监视程序呈现的虚拟硬件不匹配),以及其他一些因素 - 您看到的很可能是由大多数相关的Unix / Linux监视工具(但不包括Windows,不幸的是,请参见我的问题Is there a Windows equivalent of Unix 'CPU steal time'?以获取有关此问题的更多信息)公开的相应CPU窃取时间引起的-例如,在sartop中查看列%steal或st:

st -- 窃取时间
超级监视程序从此虚拟机“窃取”的CPU数量,用于执行其他任务(例如运行另一个虚拟机)。

The blog post EC2监控:CPU被盗的案例提供了对这个主题的很好的探索和说明:

当top命令显示40%的CPU忙碌,但CloudWatch说服务器已经达到了100%的最大值-你会选择哪一边?答案很简单(CloudWatch是正确的,top是错误的)[...]

CPU被盗时间在您使用的EC2实例类型t1.micro中特别普遍,该实例类型根据定义可以受到严重限制(通常为~97%被盗时间!),请参见Micro Instances以获取详细的解释和说明 - 具体而言,When the Instance Uses Its Allotted Resources部分指出:
我们希望您的应用程序在一段时间内只消耗特定数量的CPU资源。如果应用程序消耗掉了实例分配的CPU资源,我们将暂时限制实例以低CPU级别运行。如果您的实例继续使用其分配的所有资源,它的性能将会下降。我们将增加限制CPU级别的时间,从而增加实例再次允许突发的时间。请注意,您可能已经超出微型实例可持续的CPU使用配置文件,并且需要调整工作负载或切换到另一个实例类型。

非常好的回答。另外,我的实例现在似乎恢复正常了。 - Ryan Caskey

3

我曾遇到同样的问题,花费了很长时间才找到解决方法。在互联网上我没有找到类似的案例,因此我分享一下我的经验。

我在事件列表中发现记录了许多欺诈性登录尝试。在那种情况下,任务管理器报告CPU使用率为30-40%(Cloud Watch 100%),进程列表中可见一些winlogon.exe。更改远程桌面端口(3389是默认值)后,我再也没有遇到问题了。现在Cloud Watch中的CPU使用率始终保持在34-35%。

希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接