Kubernetes Pod报告的内存使用量比实际进程消耗要多。

5
我有一个 Kubernetes Pod,它有以下配置:
  • 申请内存 1500Mb
  • 内存限制 2048Mb
该 Pod 中运行了两个容器,一个是重型 Java 应用程序,另一个是轻量级日志船运输机。
该 Pod 持续报告使用 1.9-2Gb 的内存。由于这个原因,部署被扩展(设置了自动缩放配置,如果内存消耗 > 80%,则扩展 Pod),从而导致更多的 Pod 和更高的成本。 黄线代表应用程序内存使用情况

enter image description here

然而,进行深入研究后,我发现了以下情况。

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

有3个进程在应用程序容器内运行,其中根进程(应用程序)占用 5.9% 的内存,大约为0.92GB。

日志传输器仅使用了6MB 的内存。

现在,我不明白的是为什么我的 pod 始终报告如此高的使用度量标准。我是否遗漏了一些东西?由于意外的自动缩放而产生了重大成本,我们希望解决此问题。


进入应用程序容器并查看内存使用情况,你看到了多少?已经使用了多少? - Ijaz Ahmad
你正在使用哪个Java版本?你是否使用了-XX:+UseCGroupMemoryLimitForHeap参数,以便JVM知道你的请求和参数限制? - Nikhil
2个回答

1
在Linux中,未使用的内存被视为浪费的内存,因此所有未被应用程序或内核本身使用的“空闲”RAM都会被积极用于缓存IO操作、文件系统元数据等,但如果需要,它将提供给您的应用程序。
您可以在此处获取有关容器内存消耗的详细信息:

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

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

1

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