Docker容器中可用的实际内存是多少?



我通过docker-compose像这样运行mongodb服务:

version: '2'
services:
mongo:
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mem_limit: 4GB

如果我运行docker stats,我可以看到分配的4gb:

CONTAINER ID   NAME                     CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O    PIDS
cf3ccbd17464   michal_mongo_1           0.64%     165.2MiB / 4GiB       4.03%     10.9kB / 4.35kB   0B / 483kB   35

但是我运行这个命令,我从笔记本电脑中获得了32 GB的内存:

~$ docker exec michal_mongo_1 free -g
total        used        free      shared  buff/cache   available
Mem:             31           4          17           0           9          24
Swap:             1           0           1

mem_limit如何影响内存大小呢?

free(和其他实用程序,如top)不会在内存约束容器中报告正确的数字,因为它从没有命名空间的/proc/meminfo收集信息。

如果您想要实际的限制,您必须使用/sys/fs/cgroupcgroup伪文件系统填充的条目。

例如:

docker run --rm -i --memory=128m busybox cat /sys/fs/cgroup/memory/memory.limit_in_bytes

/sys/fs/cgroup/memory/memory.stat下提供实时使用信息。

您可能需要resident-set-size (rss),例如(在容器内部):

grep -E -e '^rsss+' /sys/fs/cgroup/memory/memory.stat

有关更深入的解释,请参阅本文

最新更新