Docker(三)資源控制
Cgroup是Control group的簡寫,是Linux內核提供的一種限制所使用物理資源的機制,這些資源主要包括CPU、內存、blkio。下面就這三個方面說一下Docker是如何使用Cgroup機制進行管理
1:限制CPU使用速率
在Docker中可以通過 --cpu-quota選項來限制CPU使用速率,CPU的百分比是以1000為單位
查看CPU使用率 [root@xyue 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 #比如: [root@xyue apache] docker run -d --cpu-quota 10000 httpd 6883bf68559ba5101b04084cca7a00674a3c69d520d5524cc37d810926906001 //CPU的使用率限定為20% #修改配置文件對Cgroup對CPU限制配置文件在,/sys/fs/cgroup/cpu/docker容器編號/cpu.cgs_quota_us的值來實現 [root@xyue ~]# cd /sys/fs/cgroup/cpu/docker/70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156 [root@xyue 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# ls cpu.cfs_quota_us #導入配置文件後立即生效 [root@xyue 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# cat cpu.cfs_quota_us -1 [root@xyue 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# echo 10000 > cpu.cfs_quota_us [root@xyue 70d968aa6ef5b132393f310e25d3f55c4a0f8f4b5a821d3c1e72431917906156]# cat cpu.cfs_quota_us 10000
多任務按比例分享CPU
當有多個容器任務運行時,很難計算CPU使用率。為了使容器合理使用CPU資源,可以通過--cpu-share選項設置CPU按比例共享CPU資源,這種方式實現CPU使用率的動態調整
[root@xyue ~]# docker run -d --cpu-shares 1024 httpd b1840fdb38d963511f779a3931d75d77747c5c18b97cd52eb8bd325529111146 [root@xyue ~]# docker run -d --cpu-shares 2048 httpd:centos 18fe91d01d360940c6c3ca8610c7dd546f439ccf5cc0821e6863b183ff41732c [root@xyue ~] 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 容器名
Docker(三)資源控制