我有一个带有以下资源的 sidecar 容器:
resources:
limits:
memory: 512Mi
requests:
memory: 64Mi
然而,当我运行时top
,我看到了这个:
- envoy 和 pilot-agent 似乎分别使用了约 363MB 和 61MB
- 顶部使用的内存为 54.6MB
- 运行
free -m
结果如下;一个看似不相关的答案
$ free -m
total used free shared buff/cache available
Mem: 385307 47140 315018 292 23148 336021
Swap: 0 0 0
这里到底发生了什么,这些进程消耗了多少内存?
答案1
该 free 和 top 输出显示已使用约 50,000 MiB,而主机总内存约为 385,000 MiB。
容器共享一个内核,因此主机指标通常会显示节点范围的数字。即使命名空间仅显示您的进程和文件。这与专用虚拟机或物理主机不同,在专用虚拟机或物理主机中,操作系统仅用于支持您的应用程序。
每个容器编号需要查询 cgroups 编号。在 Stack Overflow 上查看几种执行此操作的方法:检查 kubernetes pod CPU 和内存. 其中许多都需要指标服务器。
请注意,不要将进程的常驻内存相加,并期望这是系统的确切内存使用量。这不包括共享内存或缓存。而且内核对内存做了奇怪的计算技巧。你的 3 个有效数字是正确的想法。不过,在进程数量较少、主要使用私有内存的简单情况下,这是一个很好的估计。