对于尚未生成的容器,可以通过在指定镜像生成容器时特意添加run -m 256m或--memory-swap=512m来限制。
-m操作指定物理内存,虚拟交换分区默认情况下大小相同。 --memory-swap的值是两者的总大小。
对于已经运行的容器,可以使用docker update命令运行。
如上图所示,docker update --help可以查看使用方法。
-m --memory设定存储器的最大值; 缺省单位为byte,允许使用带单位的字符串,如k、g和m。
- -内存保留建议打开,以灵活控制内存大小并防止性能损失。 如果宿主机资源充足,容器将尽可能多地使用内存,并在检测到内存冲突或低内存时强制将容器的内存减少到内存保留中指定的内存大小。 官方表示,如果不设置此选项,某些容器可能会长时间消耗大量内存,从而导致性能损失。
内存- swap :等于内存和swap分区的大小之和,设置为-1表示swap分区大小无限。 缺省单位为byte,允许使用带单位的字符串,如k、g和m。 如果memory-swap的设置小于- memory的值,则使用默认值,是memory-swap的值的两倍。
默认情况下,容器可以使用主机上的所有可用内存。
由于docker会自动在容器目录/sys/fs/cgroup/memory/docker/中创建相应的cgroup配置文件,因此要确定容器在主机中使用的内存配额,请检查相应的配置文件
如上图所示
在cgroups配置文件中,容器的内存大小为256MB(25610241024=268435456b ),内存和swap的总大小为512MB ) 51210241024=536870912
注:实际查看在线容器时,内存和swap的大小没有限制。 之后,我自己敲击并重新检查了docker update --memory-swap=512容器ID的命令,现在是512MB。
示例:
docker stats容器ID显示容器实际使用的资源配额。 可以看到,上面示例中的容器用于mysql,并且占用了内存。 wordpress博客的容器使用中的内存为122MB左右。 256米也足够了。
迄今为止,容器每隔一周自动退出两周,也被怀疑是主机oom因为没有限制而将其击垮了。
这就是为什么现在用于free -h观测宿主机的内存没有持续增加的原因。
by:wqdxxm和猫
2017年9月
结束