Docker资源控制
Cgroup是Control group的简写,是Linux内核提供的一种限制所使用物理资源的机制,这些资源主要包括CPU、内存、blkio。下面就这三个方面说一下Docker是如何使用Cgroup机制进行管理
1:限制CPU使用速率
在Docker中可以通过 --cpu-quota选项来限制CPU使用速率,CPU的百分比是以1000为单位
查看CPU使用率
[[email protected] apache] docker stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
315af9149b30 0.00% 7.406MiB / 992.7MiB 0.75% 912B / 0B 11.3MB / 0B 82
70d968aa6ef5 0.00% 5.484MiB / 992.7MiB 0.55% 3.71kB / 2.34kB 4.85MB / 0B 8
#比如:
[[email protected] apache] docker run -d --cpu-quota 10000 httpd
6883bf68559ba5101b04084cca7a00674a3c69d520d5524cc37d810926906001 //CPU的使用率限定为20%
#修改配置文件对Cgroup对CPU限制配置文件在,/sys/fs/cgroup/cpu/docker容器编号/cpu.cgs_quota_us的值来实现
[[email protected] ~]# cd /sys/fs/cgroup/cpu/docker/70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156
[[email protected] 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# ls
cpu.cfs_quota_us
#导入配置文件后立即生效
[[email protected] 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# cat cpu.cfs_quota_us
-1
[[email protected] 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# echo 10000 > cpu.cfs_quota_us
[[email protected] 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# cat cpu.cfs_quota_us
10000
多任务按比例分享CPU
当有多个容器任务运行时,很难计算CPU使用率。为了使容器合理使用CPU资源,可以通过--cpu-share选项设置CPU按比例共享CPU资源,这种方式实现CPU使用率的动态调整
[[email protected] ~]# docker run -d --cpu-shares 1024 httpd
b1840fdb38d963511f779a3931d75d77747c5c18b97cd52eb8bd325529111146
[[email protected] ~]# docker run -d --cpu-shares 2048 httpd:centos
18fe91d01d360940c6c3ca8610c7dd546f439ccf5cc0821e6863b183ff41732c
[[email protected] ~] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
18fe91d01d36 httpd:centos "/run.sh" 6 seconds ago Up 5 seconds 80/tcp romantic_hodgkin
b1840fdb38d9 httpd "httpd-foreground" 57 seconds ago Up 56 seconds 80/tcp youthful_bartik
限制CPU内核使用
在Docker中可以直接使用--cpuset-cpus选项来世某个程序独享CPU内核以便提高处理速度,对应的Cgroup配置文件为/sys/fs/cgroup/cpuset/docker容器编号cpuset.cpus。选项后面直接跟参数0,1,2...表示第一个内核,第二个内核,第三个内核
如果服务器有16个核心,那么CPU编号为0~15,是容器绑定1~4个内核使用
docker run -d --cpuset-cpus 0,1,2,3 容器名
对内存使用限制
在Docker中可以通过docker run -m 命令来限制内存使用量相应Cgroup配置文件为/sys/fs/cgroup/memory.limit_in_bytes。但需要注意:一旦容器Cgroup使用超过内存限制的容量,Linux内核将会尝试收回这些内存,如果人就无法控制内存使用限制范围之内,进程就会被杀死
例如:限制容器内存为512M
docker run -m 512m 512
对blkio的限制
如果在一台服务器上进行容器的混合部署,那么会出现有几个程序写入磁盘数据的情况,可以通过--device-write-iops选项来限制写入iops,相应还有--device-read-bps选项可以限制读取iops。但是这种方法只能针对blkio限制的设备,而不是分区。相应Cgroup写配置文件/sys/fs/cgroup/blkio/docker/容器ID/blkio.write_iops_device
例如限制容器的/dev/sda1的写入iops为1MB
docker run --device-write-bps /dev/sda1:1mb 容器名
原文地址:http://blog.51cto.com/13645280/2159030