代码之家  ›  专栏  ›  技术社区  ›  gabbar0x

Kubernetes Pod报告了比实际进程消耗更多的内存使用情况

  •  1
  • gabbar0x  · 技术社区  · 7 年前

    我有一个Kubernetes吊舱

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

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

    pod始终报告内存使用量为1.9-2Gb。因此,部署是可伸缩的(设置了自动缩放配置,如果内存消耗超过80%,则可缩放pod),这自然会导致更多的pod和更多的成本

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

    enter image description here

    然而,在更深入的调查中,我发现了这一点。

    打开 exec top 命令,它总共报告 16431508 KiB 或者大约16Gb的可用内存,这是机器上可用的内存。

    应用程序容器中有3个进程在运行,根进程(应用程序)从中获取 内存,大约是0.92Gb。

    日志传送程序只需要6Mb内存。

    现在,我不明白的是 为什么? 我的pod总是报告如此高的使用指标。我遗漏了什么吗?由于意外的自动缩放,我们要承担巨大的成本,因此我们希望修复同样的问题。

    1 回复  |  直到 7 年前
        1
  •  0
  •   getslaf    7 年前

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

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

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