control group
简写cgroup,cgroup是linux内核提供的一种限制使用物理资源的机制
物理资源包括:cpu、内存、blkio(磁盘设备io速率)
1.对cpu控制
使用--cpu-quota
限制cpu的使用率,cpu百分比是以1000为单位的,比如:
docker run --cpu-quota 20000 容器名 #cpu的使用率限定为20%
还可以通过修改对应的cgroup配置文件来实现:
/sys/fs/cgroup/cpu/docker/容器名/cpu.cfs_quota_us
echo 20000 >/sys/fs/cgroup/cpu/docker/10c4e8a5ba76e0fae97cc680892c169ffcdb188db64962f958c0adefae418e1d/cpu.cfs_quota_us
2.多任务比例分享cpu
当有多个容器任务运行时,很难计算cpu的使用率。为了合理使用cpu资源,通过--cpu-share
设置按比例共享cpu资源,这种方法还可以实现cpu使用率的动态调整
限制a b c三个容器使用cpu,占用cpu资源的比例时1:1:2,如下:
数字代表权重
docker run --cpu-shares 1024 a
docker run --cpu-shares 1024 b
docker run --cpu-shares 2048 c
3.限制cpu内核使用
-
使用
--cpuset-cpus
选项来使某些程序独享cpu内核,提高处理速度 -
对应的cgroups配置文件是
/sys/fs/cgroup/cpuset/docker/caef736466bc2f069069bd38acdd9bc6328fc02e686294f07977ce299e48271a/cpuset.cpus
ca...271a为相应的容器编号
-
如果服务器有16个核心,cpu编号为0-15,使用容器绑定1-4个内核可以
docker run --cpuset-cpus 0-3 容器名 docker run --cpuset-cpus 0,1,2,3 容器名
则容器内的进程只会在编号1,2,3,4的cpu上运行
-
尽量使用绑定内核的方式分配cpu资源给容器进程使用,搭配–cpu-shares选项动态调整cpu使用资源的比例
4.对内存使用的限制
使用docker run -m来限制,相应的cgroup配置文件是
[root@centos7-docker ~]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
9223372036854771712
注意:
- 一旦容器cgroup使用的内存超出了限制,Linux内核会回收这些内存
- 如果回收不了,没法控制内存使用在限制的范围内,进程就会被kill
docker run -m 512m
5.对blkio限制
-
如果在一台服务器上进行容器的混合部署,那么会出现同时有几个程序写磁盘数据的情况,这时通过
--device-write-iops
限制写入的iops,相应的还有--device-read-bps
选项可以限制读取的iops。 -
这种方法只能针对blkio限制的是设备(device),而不是分区
-
相应cgroup配置文件
/sys/fs/cgroup/blkio/docker/bf669a47ae96e78ca5b629c4dfc33534bfe832107a3f824471866a7fc8ae4769/blkio.throttle.write_iops_device
-
限制容器的/dev/sda1的写入ipos为1MB
docker run --device-write-bps /dev/sda1:1mb 容器名