top
显示高峰时段的平均 CPU 使用率约为 20%,而 CloudWatch 监控显示的平均 CPU 使用率为 40%。是什么导致了这种差异?
答案1
这是一个非常好的观察,我们也遇到过这种情况。以下是我发现的情况:
在 EC2 实例中测量 CPU 使用率时要小心谨慎。可能会看到 CPU 使用率远低于 100% — 但仍然完全达到最大值。相信我:我经历过这种情况。(顺便说一下,CloudWatch CPUUtilization 是从实例外部测量的,并且始终是正确的。)
这里对整个事情有很好的描述:https://axibase.com/news/ec2-monitoring-the-case-of-stolen-cpu/(档案这里)
在上面的示例中,m1.small EC2 实例分配了 0.4 个处理器单元,因此 40% CPU 繁忙意味着底层核心的使用率百分比。但是,由于 40% 是可以分配给此 VM 的最大 CPU 份额,因此有效 CPU 使用率为 40%/40% = 100%。这是 CloudWatch 显示的数字。
如果您想知道 40% 是从哪里来的,计算起来很简单。m1.small linux 系统有权使用 1 个 EC2 计算单元,该单元提供的 CPU 容量相当于 1.0–1.2 GHz 2007 Opteron 或 2007 Xeon 处理器。由于 VM 在时钟速度为 2.6 GHz 的机器上运行,因此它有权在此特定 XEN 节点上获得 38.4%—46.2% 的处理器份额。您可以运行 cat /proc/cpuinfo 命令来找出 EC2 实例背后的 CPU 架构。
特别注意关于如何处理不懂特殊数学的工具的提示:
另一个可用于改造现有代理或基于 SNMP 的监控工具(这些工具未与 CloudWatch 集成)的选项是使用 CPU 空闲指标。您需要做的就是重写规则以测量 CPU 空闲而不是 CPU 繁忙。例如,如果您为 CPU 繁忙定义了 >75% 的阈值,则为 CPU 空闲创建 <25% 的规则。如果 CPU 空闲为 0,则您的服务器受 CPU 限制。
非常简单。非常好。
当您在 EC2 实例中运行 top 时,它会测量运行您的实例和其他实例的物理核心机器的 CPU 使用率。如果您只想测量实例(分配给您的实例的 EC2 计算单元)的 CPU 使用率,则这种用法是不正确的。
这就是为什么 cloudwatch 指标是真实的,因为它是在实例外部针对单独分配给您的实例的 EC2 计算单元进行测量的。
看这里 - https://forums.aws.amazon.com/thread.jspa?threadID=99993