Docker資源限制Cgroup的深入理解
1.Cgroup簡介
_cgroups,是一個非常強大的linux內核工具,他不僅可以限制被namespace隔離起來的資源,
還可以為資源設置權重、計算使用量、操控進程啟停等等。所以cgroups (Control groups) 實現瞭對資源的配額和度量。
cgroups有四大功能:
- 資源限制:可以對任務使用的資源總額進行限制;
- 先級分配:通過分配的cpu時間片數量以及磁盤I0帶寬大小,實際上相當於控制瞭任務運行優先級;
- 資源統計:可以統計系統的資源使用量,如cpu時長, 內存用量等;
- 任務控制: cgroup可以對任務執行掛起、恢復等操作。
2.CPU資源限制
Linux通過CFS ( Completely Fair Scheduler, 完全公平調度器)來調度各個進程對CPU的使用。CFS默認的調度周期是100ms。
可以設置每個容器進程的調度周期,以及在這個周期內各個容器最多能使用多少CPU時間。
使用–cpu-period即可設置調度周期,使用–cpu-quota即可設置在每個周期內容器能使用的CPU時間。兩者可以配合使用。
CFS周期的有效范圍是1ms~1s, 對應的–cpu-period的數值范圍是1000~1000000。
容器的CPU 配額必須不小於1ms,即–cpu-quota 的值必須>= 1000。
2.1 查看CPU使用率
1.查看默認值
[root@localhost ~]# cd /sys/fs/cgroup/cpu/docker [root@localhost docker]# cat cpu.cfs_period_us cpu.cfs_quota_us 100000 -1 #cfs_period_us表示一個cpu帶寬,單位為微秒。系統總CPU帶寬: cpu核心數 * cfs_period_us #cfs_quota_us表示Cgroup可以使用的cpu的帶寬,單位為微秒。cfs_quota_us為-1,表示使用的CPU不受cgroup限制。cfs_quota_us的最小值為1ms(1000),最大值為1s。
2.2 測試CPU使用率
docker run -it --name test01 debian:latest vi cpu.sh #!/bin/bash i=0 while true do let i++ done chmod +x cpu.sh ./cpu.sh & 另一個終端使用top查看
2.3 設置CPU資源占用比(設置多個容器時才有效)
docker rm -f `docker ps -a -q` #刪除原有容器 docker run -itd --name test01 --cpu-shares 1024 centos:latest docker run -itd --name test02 --cpu-shares 512 centos:latest #分別進入容器,進行壓力測試 docker exec -it test01/02 bash yum install -y epel-release yum install stress -y stress -c 4 #產生四個進程,每個進程都反復不停的計算隨機數的平方根 #查看容器的運行狀態(動態更新) docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID #########################################如果容器使用的是centos8可能無法使用yum安裝,按下步驟恢復 cd /etc/yum.repos.d/ sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo yum clean all yum makecache
以下操作test01與test02相同
由上圖可以看見兩個容器之間的cpu使用比率接近於2:1
(cpu使用率超過100的原因:當單個處理器的使用率達到100%時。對於多個處理器,這個數字將超過100%,您需要乘以主機可用
的處理器數量,才能找到理論上限,由於該虛擬機我分配瞭兩核心,所以理論使用上線為200%)
3.對內存使用進行限制
docker run -itd --name test03 -m 512m centos:latest docker stats
4.對磁盤IO配額控制(blkio)的限制
#–device - read-bps:限制某個設備上的讀速度bps (數據量),單位可以是kb、mb (M)或者gb。 docker run -itd --name test04 --device-read-bps /dev/sda:1M centos:latest bash #–device-write-bps :限制某個設備上的寫速度bps (數據量),單位可以是kb、mb (M)或者gb。 docker run -itd --name test05 --device-write-bps /dev/sda:1M centos:latest bash --device-read-iops :限制讀某個設備的iops (次數) --device-write-iops :限制寫入某個設備的iops (次數) #進入容器驗證寫入速度 dd if=/dev/zero of=test.txt bs=2M count=5 oflag=direct #添加oflag參數以規避掉文件系統cache
到此這篇關於Docker資源限制Cgroup的深入理解的文章就介紹到這瞭,更多相關Docker 資源限制 Cgroup內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- docker資源控制管理Cgroup的實現
- Centos7安裝Docker(2020最新親測可用,直接復制粘貼即可)
- centos搭建部署docker環境的詳細步驟
- Docker容器從鏡像恢復代碼的操作步驟
- 教你如何在Mac上安裝VMware Fusion和CentOS-7