为什么 AWS Fargate 任务容器会报告非常错误的内存限制?

为什么 AWS Fargate 任务容器会报告非常错误的内存限制?

我们的任务定义将任务内存设置为 8192MiB。其运行 Debian 的唯一 docker 容器配置为无内存限制。

在引导程序中,我们调用cat /proc/meminfo并获取一份报告,其中显示:

MemTotal: 15649752 kB
MemFree: 13246500 kB
MemAvailable: 15126708 kB

为什么 MemTotal 报告的大小几乎是任务限制的两倍?我尝试了类似的运行,将任务内存设置为 2048MiB,而 /proc/meminfo 报告的内存约为 3300MB - 因此膨胀程度类似。

更新

AWS Support 的解释是,容器报告的是其主机的大小。因此,在这种情况下,它大概是一台 16GB 的主机,主机向容器隐藏了一些内存。我对 ECS 使用的 Docker 架构不太了解,所以不太清楚为什么它没有报告完整的 16GB。

修改后的问题

鉴于这些信息,我修改后的问题可以归结为“从容器内部获取容器可用实际内存的最简单方法是什么?” 还有一个后续问题,“是否可以强制更改 OS API 调用(在本例中为 Debian)报告的总内存报告值,以便准确反映可用内存量?”

答案1

grep hierarchical_memory_limit /sys/fs/cgroup/memory/memory.stat

我相信这能做到

https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt

hierarchical_memory_limit - 与内存 cgroup 所属层次结构相关的内存限制字节数

因此这似乎是分配给容器的内存。您还可以找到分配的硬限制和软限制

cat /sys/fs/cgroup/memory/memory.soft_limit_in_bytes
cat /sys/fs/cgroup/memory/memory.hard_limit_in_bytes

相关内容