Docker 容器资源管理,你真的学会了吗?( 五 )


2. 如果只指定了 --memory 则最终 --memory-swap 将会设置为 --memory 的两倍 。也就是说,在只传递 --memory 的情况下,容器只能使用与 --memory 相同大小的 Swap 。
这也解释了上面“直接扩大至 20m 的时候能成功,而扩大到 100m 的时候会出错”,在上述场景中只指定了 --memory 为 10m,所以 --memory-swap 就默认被设置成了 20m 。
3. 如果 --memory-swap 和 --memory 设置了相同值,则表示不使用 Swap 。
4. 如果 --memory-swap 设置为 -1 则表示不对容器使用的 Swap 进行限制 。
5. 如果设置了 --memory-swap 参数,则必须设置 --memory 参数 。
至此,我介绍了容器资源管理的核心内容,包括管理容器的 CPU 资源和内存资源 。为容器进行合理的资源控制,有利于提高整体环境的稳定性,避免资源抢占或大量内存占用导致 OOM,进程被杀掉等情况 。
对 CPU 进行管理时,建议使用 --cpus,语义方面会比较清晰 。如果是对 Linux 的 CPU 调度器 CFS 很熟悉,并且有强烈的定制化需求,这种情况下再使用 --cpu-period 和 --cpu-quota 比较合适 。
对内存进行管理时,有个 --memory-swappiness 参数也需要注意下,它可设置为 0~100 的百分比,与我们平时见到的 swappiness 行为基本一致,设置为 0 表示不使用匿名页面交换,设置为 100 则表示匿名页面都可被交换 。如果不指定的话,它默认会从主机上继承 。
在本文中,关于在宿主机上查看容器的内存限制,我给出了一个命令:
(MoeLove)~ cat/sys/fs/cgroup/memory/system.slice/docker-$(docker inspect --format '{{ .Id}}' $(docker ps -ql)).scope/memory.limit_in_bytes10485760
本文节选自GitChat专栏,戳链接查看详情:https://gitbook.cn/m/mazi/comp/column?columnId=5d70cfdc4dc213091bfca46f
【Docker 容器资源管理,你真的学会了吗?】Tags:


推荐阅读