docker容器的内存配置

docker容器的内存配置

(1)和CPU控制一样,docker也提供了若干参数来控制容器的内存使用配额,可以控制容器的swap大小、可用内存大小等各种内存方面的控制。

主要有以下参数:
memory-swappiness:

控制进程将物理内存交换到swap分区的倾向,默认系数为60。系数越小,就越倾向于使用物理内存。值范围为0-100。当值为100时,表示尽量使用swap分区;当值为0时,表示禁用容器 swap 功能(这点不同于宿主机,宿主机 swappiness 设置为 0 也不保证 swap 不会被使用)。

–kernel-memory:

内核内存,不会被交换到swap上。一般情况下,不建议修改,可以直接参考docker的官方文档。

–memory:

设置容器使用的最大内存上限。默认单位为byte,可以使用K、G、M等带单位的字符串。

–memory-reservation:

启用弹性的内存共享,当宿主机资源充足时,允许容器尽量多地使用内存,当检测到内存竞争或者低内存时,强制将容器的内存降低到memory-reservation所指定的内存大小。按照官方说法,不设置此选项时,有可能出现某些容器长时间占用大量内存,导致性能上的损失。

–memory-swap:

等于内存和swap分区大小的总和,设置为-1时,表示swap分区的大小是无限的。默认单位为byte,可以使用K、G、M等带单位的字符串。如果–memory-swap的设置值小于–memory的值,则使用默认值,为–memory-swap值的两倍。
默认情况下,容器可以使用主机上的所有空闲内存。

(2)内存配额控制使用示例

设置容器的内存上限,参考命令如下所示:
docker run -tid —name mem1 —memory 128m ubuntu:stress /bin/bash
默认情况下,除了–memory指定的内存大小以外,docker还为容器分配了同样大小的swap分区,也就是说,上面的命令创建出的容器实际上最多可以使用256MB内存,而不是128MB内存。如果需要自定义swap分区大小,则可以通过联合使用–memory–swap参数来实现控制。
对上面的命令创建的容器,可以查看到在cgroups的配置文件中,查看到容器的内存大小为128MB (128×1024×1024=134217728B),内存和swap加起来大小为256MB (256×1024×1024=268435456B)。
cat /sys/fs/cgroup/memory/docker/<容器的完整ID>/memory.limit_in_bytes 134217728
cat /sys/fs/cgroup/memory/docker/<容器的完整ID>/memory.memsw.limit_in_bytes 268435456

你可能感兴趣的:(Docker相关,docker)