【发布时间】: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