1. 程式人生 > >Docker(三)資源控制

Docker(三)資源控制

sta 包括 直接 docker cpu使用率 一個 art 簡寫 inux

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(三)資源控制