kubectl 顶级节点报告的内存利用率比 Linux 系统命令高

kubectl top nodes reporting more memory utilisation than Linux system commands

我一直在 Whosebug 上寻找这个,但找不到满意的答案。

当 运行ning kubectl top nodes <node name> 时,我得到的内存利用率约为。 69%(Kubernetes 显示大约使用了 32Gi 中的 21Gi)。但是如果我进入系统本身和 运行 free 命令,以及 top 命令,我看到总共有 6GB 的已用内存(即 20% - 这是free) 输出中 used 列下的信息 - 远远小于 32GB 系统总内存的 69%。

即使考虑到 Gi 和 GB 的差异,仍有超过 40% 的差异未说明。我知道 Kubernetes 使用 /sys/fs/cgroup/memory/memory.usage_in_bytes 报告的统计数据来报告内存利用率,但为什么这与系统上其他进程报告的利用率不同(尤其是有时更高)?我应该把哪一个作为真实来源?

在这里找到了我的问题的答案:https://serverfault.com/questions/902009/the-memory-usage-reported-in-cgroup-differs-from-the-free-command。综上所述,Kubernetes 似乎使用了 /sys/fs/cgroup/memory/memory.usage_in_bytes 中报告的 cgroup 内存利用率。 cgroup 内存利用率不仅计算 RAM 中当前使用的内存,还计算 "cached" 内存(即应用程序不再需要的任何内存,这些内存随后可由 OS 免费回收,但还没有尚未回收)。 Linux 系统命令将 "cached" 内存视为 "free" 但 Kubernetes 没有(不确定为什么)。