首頁 > 軟體

Docker資源限制Cgroup的深入理解

2022-07-10 10:00:02

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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com