Kubernetes Pod报告的内存使用量超过实际进程消耗

时间:2018-10-24 07:25:19

标签: linux memory-management process kubernetes

我有一个具有

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

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

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

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

enter image description here

但是,在更深入的调查中,这是我发现的。

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

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

日志发件人仅占用6Mb的内存。

现在,我不明白的是为什么为什么我的pod一直报告如此高的使用率指标。我想念什么吗?由于意外的自动缩放,我们蒙受了巨大的费用,并且想解决这个问题。

2 个答案:

答案 0 :(得分:0)

在Linux中,未使用的内存被视为浪费的内存,这就是为什么所有“可用” RAM i的原因。 e。应用程序或内核本身未使用的内存可用于缓存IO操作,文件系统元数据等,但是会在需要时提供给您的应用程序。

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

  

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

如果要基于内存使用量扩展群集,最好只计算应用程序大小,而不要计算容器内存使用量。

答案 1 :(得分:0)

万一有人到这里来,请参见以下问题,详细了解使用kubectl top与在容器内运行topfree的区别: Checking kubernetes pod CPU and memory