【问题标题】:Kubernetes Pod reporting more memory usage than actual process consumptionKubernetes Pod 报告的内存使用量超过实际进程消耗量
【发布时间】:2019-03-28 12:34:43
【问题描述】:

我有一个 Kubernetes Pod,它有

  • 请求的内存为 1500Mb
  • 内存限制为 2048Mb

我在这个 pod 中运行了 2 个容器,一个是实际应用程序(重型 Java 应用程序)和一个轻量级日志传送器。

Pod 始终报告 1.9-2Gb 的内存使用情况。因此,部署是可扩展的(设置了自动扩展配置,如果内存消耗 > 80% 会扩展 pod),自然会导致更多的 pod 和更多的成本

黄线代表应用程序内存使用情况

但是,经过深入调查,我发现了这一点。

在应用程序容器内的execing 上,我运行了top 命令,它报告总共有16431508 KiB 或大约16Gb 的可用内存,这是机器上的可用内存。

应用程序容器内运行着3个进程,其中根进程(应用程序)占用5.9%内存,大致达到0.92Gb。

log-shipper 只占用 6Mb 的内存。

现在,我不明白的是为什么我的 pod 一直报告如此高的使用指标。我错过了什么吗?由于意外的自动缩放,我们产生了巨大的成本,并希望解决这个问题。

【问题讨论】:

  • 执行到应用程序容器中,您看到什么内存使用情况?用了多少?
  • 您使用的是哪个 java 版本?您是否使用 -XX:+UseCGroupMemoryLimitForHeap 参数,以便 JVM 知道您的请求和限制参数?

标签: linux memory-management process kubernetes


【解决方案1】:

在 Linux 中,未使用的内存被认为是浪费的内存,这就是为什么所有“空闲”RAM i。 e.应用程序或内核本身未使用的内存被积极用于缓存 IO 操作、文件系统元数据等,但如果需要,将提供给您的应用程序。

您可以在此处获取有关容器内存消耗的详细信息:

/sys/fs/cgroup/memory/docker/{id}/memory.stat

如果您想根据内存使用情况扩展集群,最好只计算您的应用程序大小,而不是容器内存使用情况。

【讨论】:

    【解决方案2】:

    如果有人在这里结束,请参阅此问题以了解更多关于使用 kubectl top 与在容器内运行 topfree 的区别: Checking kubernetes pod CPU and memory

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 2017-05-28
      • 2020-10-19
      • 2021-10-16
      • 2020-04-04
      • 1970-01-01
      • 2018-12-13
      相关资源
      最近更新 更多