我有一个具有
的Kubernetes Pod我在此容器中运行着2个容器,一个是实际的应用程序(重型Java应用程序)和一个轻量级的日志传送器。
pod始终报告1.9-2Gb的内存使用情况。因此,可以扩展部署(设置自动扩展配置,如果内存消耗> 80%,则可以扩展Pod),自然会导致更多Pod和更多成本
黄线代表应用程序内存使用情况
但是,在更深入的调查中,这是我发现的。
在应用程序容器内的exec
上,我运行了top
命令,它报告了总共16431508 KiB
或大约16Gb的可用内存,这是计算机上可用的内存。机器。
应用程序容器中运行着3个进程,其中根进程(应用程序)占内存的 5.9%,大约为0.92Gb。
日志发件人仅占用6Mb的内存。
现在,我不明白的是为什么为什么我的pod一直报告如此高的使用率指标。我想念什么吗?由于意外的自动缩放,我们蒙受了巨大的费用,并且想解决这个问题。
答案 0 :(得分:0)
在Linux中,未使用的内存被视为浪费的内存,这就是为什么所有“可用” RAM i的原因。 e。应用程序或内核本身未使用的内存可用于缓存IO操作,文件系统元数据等,但是会在需要时提供给您的应用程序。
您可以在此处获取有关容器内存消耗的详细信息:
/ sys / fs / cgroup / memory / docker / {id} /memory.stat
如果要基于内存使用量扩展群集,最好只计算应用程序大小,而不要计算容器内存使用量。
答案 1 :(得分:0)
万一有人到这里来,请参见以下问题,详细了解使用kubectl top
与在容器内运行top
或free
的区别:
Checking kubernetes pod CPU and memory