本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

Docker运维教程(4)docker容器的资源限制

发布:TangLu2019-2-26 17:22分类: Docker+K8S 标签: docker

在Docker的默认配置中是没有对容器做资源限制的,在容器发生异常的状况下有可能耗光宿主机所有资源导致OOM,OOM一旦发生任何进程都有可能被系统杀掉。所以在启动Docker容器时最好是指定CPU、内存、硬盘大小等硬件配额。Docker通过cgroup来控制这些资源配额,也就是说下面讲到的命令其实都是在配置cgroup。比如调整了CPU的限制后,在/sys/fs/cgroup/cpu/docker/container_id/可以看到设置的值。cgroup分配的结果取决于当时主机和其他容器的运行状况,如果A容器很空闲,那么即使给它分配了更多份额,也会被其他忙碌的容器抢夺资源,是一种动态分配。设置好配额后可以在容器中用压力工具stress来测试

一、Docker的资源限制

1、Docker内存限制

-m | --memory:设置容器可用内存大小,支持单位有k、m、g

--memory-swap:设置内存+swap的总大小,配合-m一起使用,该选项不指定的话默认是-m的2倍大小

--oom-kill-disable:不允许容器因为OOM被系统杀掉,建议配合-m选项使用,避免宿主内存被耗光

docker run -itd -m 1024m --memoery-swap=1524m --oom-kill-disable docker.io/centos  #容器使用的内存上限为1G,虚拟内存500M,超过该内存限制就会停止容器

2、Docker硬盘I/O限制,限制后在容器中读写文件都不会超限

--device-read-bps:限制读某个设备的bps

--device-write-bps:限制写某个设备的bps

--device-read-iops:限制读某个设备的iops

--device-write-iops:限制写某个设备的iops

docker run -it --name iotest --device-write-bps /dev/sda1:30M docker centos  #限制最高写速度为30M/S


3、Docker CPU配额设置

-c | --cpu-share:CPU权重设置,Docker会把CPU资源分成1024份,如果对一个容器设置了1024意味它独占所有CPU资源,如果多个容器同时进行了设置,那么每个容器最后会通过各自占有的百分比来分配CPU资源

--cpus:限制CPU核数

--cpuset-cpus:设置CPU亲和,让容器绑定在指定的CPU上 

docker run -it --name test  --cpu-shares 1024 docker.io/centos /bin/bash
docker run -it --name test  --cpu-shares  512 docker.io/centos /bin/bash  

CPU亲和设置,比如物理机有16个核心,创建的容器只能用0、1、2这三个内核

docker run -itd --name testcpu --cpuset-cpus 0-2 docker.io/centos
cat /sys/fs/cgroup/cpuset/docker/dockerid/cpuset.cpus


二、使用progrium/stress镜像测试Docker配额限制

1、内存压测,如下代表启动一个线程,每个线程分配500M内存。由于超过了容器最大内存会报错退出:

docker run -it -m 200m --memory-swap=300m progium/stress --vm 1 --vm-bytes 400m

2、CPU测试。分配权重为2:1,容器启动后在宿主机执行top命令可以看到占比为66%、33%

docker run --name "test1" -c 1024 centos

docker run --name "test2" -c 512 centos


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《Docker运维教程(4)docker容器的资源限制
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-404.html  [生成短网址]

已有 0/1523 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~