我们的任务定义将任务内存设置为 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