考虑针对我的集群运行这两个命令。
首先汇总所有已知使用的 RAM,如下表所示top nodes
:
$ kubectl --no-headers=true top nodes | awk 'BEGIN { total=0 } { total+=$4 } END { print total, "Mi" }'
504972 Mi
然后由所有 podstop pods
phs@anvil:~$ kubectl --no-headers=true --all-namespaces=true top pods | awk 'BEGIN { total=0 } { total+=$4 } END { print total, "Mi" }'
163503 Mi
我已经确认所有活着的豆荚都出现在 中top pods
。
如此巨大的差异是怎么回事?多余的内存用在哪儿了?
答案1
看来差异归结于buffers
。如果我们free -mw
在每个节点上运行,我可以看到那里有大量(10-15 GB)的内存被占用。
$ kubectl get nodes -o name | cut -d / -f 2 | while read node; do ssh -n admin@$node 'free -mw | fgrep Mem:'; done | awk 'BEGIN { total=0 } { total+=$6 } END { print total, "Mi" }'
278815 Mi
它们的总数大约是缺失的挂载(这些命令是在不同时间运行的,因此不应该期望完全相等。)