【问题标题】:EC2 CloudWatch memory metrics don't match what Top showsEC2 CloudWatch 内存指标与 Top 显示的不匹配
【发布时间】:2016-03-29 22:44:54
【问题描述】:

我有一个 t2.micro EC2 实例,以大约 2% 的 CPU 运行。我从其他帖子中了解到,TOP 中显示的 CPU 使用率与 CloudWatch 中报告的 CPU 不同,应该信任 CloudWatch 值。

但是,我发现 TOP、CloudWatch 和 NewRelic 之间的内存使用值非常不同。

实例上有 1Gb 的 RAM,TOP 显示约 300Mb 的 Apache 进程,以及约 100Mb 的其他进程。 TOP 报告的总体内存使用量为 800Mb。我猜有 400Mb 的操作系统/系统开销?

但是,CloudWatch 报告了 700Mb 的使用量,而 NewRelic 报告了 200Mb 的使用量(尽管 NewRelic 在其他地方报告了 300Mb 的 Apache 进程,所以我忽略了它们)。

CloudWatch 内存指标经常超过 80%,我想知道实际值是多少,因此我知道在必要时何时进行扩展,或者如何减少内存使用量。

这是最近的内存配置文件,随着时间的推移,似乎有些东西正在使用更多的内存(大幅下降是 Apache 重新启动,或者可能是 GC?)

Screenshot of memory usage over last 12 days

【问题讨论】:

    标签: memory memory-management amazon-ec2 amazon-cloudwatch


    【解决方案1】:

    AWS 不支持任何 EC2 实例的内存指标。由于 Amazon 从 EC2 实例(服务器)外部进行所有监控,因此无法捕获实例内部的内存指标。但是,要完整监控一个实例,您必须需要任何实例的内存利用率统计信息,以及他的 CPU 利用率和网络 IO 操作。 但是,我们可以使用 cloudwatch 的自定义指标功能将任何应用程序级数据发送到 Cloudwatch 并使用亚马逊工具对其进行监控。 您可以关注此博客了解更多详情:http://upaang-saxena.strikingly.com/blog/adding-ec2-memory-metrics-to-aws-cloudwatch

    您可以在该实例中设置 5 分钟间隔的 cron,所有数据点都可以在 Cloudwatch 中看到。

    【讨论】:

      【解决方案2】:

      CloudWatch 实际上并未提供有关 EC2 实例的内存使用情况的指标,您可以确认here

      因此,您所指的 MemoryUtilization 指标显然是一个自定义指标,由您已配置的内容或在您的实例上运行的某个应用程序推送。

      因此,您需要确定实际推送该指标数据的原因。数据源显然是推错了东西,或者说是不可靠的。

      您看到的行为不是 CloudWatch 问题。

      【讨论】:

      • 感谢 cmets。澄清一下,我正在使用 Amazon 提供的脚本将内存信息发送到 Cloudwatch (docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/…) 将其与 Top 和 NewRelic 提供的内存信息进行比较显示不同的值,因此我试图了解在何时最信任哪个它涉及评估服务器何时达到容量。
      • 这真的很有趣。我不完全确定这些脚本是如何工作的,但我知道它们不受官方支持。您在使用亚马逊 Linux 吗?也许脚本与其他 Linux 发行版一样不可靠...我建议您将其放在官方 AWS 支持论坛上
      • 对“我知道官方不支持它们”的引用 - OP 提供了 AWS 文档的链接。所以它是官方支持的吧?
      猜你喜欢
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 2019-12-13
      • 2019-05-02
      • 2018-08-05
      • 2015-02-15
      • 1970-01-01
      • 2019-03-31
      相关资源
      最近更新 更多