一、CPU控制
cgroups,是一個非常強大的linux內核工具,他不僅可以限制被namespace隔離起來的資源,
還可以為資源設定權重、計算使用量、操控行程啟停等等,所以cgroups (Control groups) 實作了對資源的配額和度量,
cgroups有四大功能:
- 資源限制:可以對任務使用的資源總額進行限制;
- 優先級分配:通過分配的cpu時間片數量以及磁盤I0帶寬大小,實際上相當于控制了任務運行優先級;
- 資源統計:可以統計系統的資源使用量,如cpu時長, 記憶體用量等;
- 任務控制: cgroup可以對任務執行掛起、恢復等操作,
1.1設定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,
1.1.1查看CPU使用率
docker run -itd --name test centos:7 /bin/bash cd /sys/fs/cgroup/cpu/docker/1901c0b13a9c4b1c0be333e7f7320d74b2c7c3cc1e3bd3881414fc6c135056a9/ cat cpu.cfs_period_us cpu.cfs_quota_us 100000 -1
cpu.cfs_period_us:cpu分配的周期(微秒,所以檔案名中用 us 表示),默認為100000,
cpu.cfs_quota_us:表示該control group限制占用的時間(微秒),默認為-1,表示不限制, 如果設為50000,表示占用50000/100000=50%的CPU,


1.1.2進行CPU壓力測驗
docker exec -it 98804287283c /bin/bash vim /cpu.sh #!/bin/bash i=0 while true do let i++ done chmod +x /cpu.sh ./cpu.sh exit top


1.1.3設定CPU使用率
#設定50%的比例分配CPU使用時間上限 docker run -itd --name test2 --cpu-quota 50000 centos:7 /bin/bash #可以重新創建一個容器并設定限額 或者 cd /sys/fs/cgroup/cpu/docker/98804287283ce0f6abe8a19c9884c6b5149acc5a050a767e9f5f4bac5472ef56 echo 50000 > cpu.cfs_quota_us docker exec -it 98804287283c /bin/bash ./cpu.sh exit top #可以看到cpu占用率接近50%,cgroups對cpu的控制起了效果


1.2設定CPU資源占用比(設定多個容器時才有效)
Docker 通過--cpu-shares 指定 CPU 份額,默認值為1024,值為1024的倍數,
創建兩個容器為 c1 和 c2,若只有這兩個容器,設定容器的權重,使得c1和c2的CPU資源占比為1/3和2/3,
docker run -itd --name test1 --cpu-shares 1024 centos:7 docker run -itd --name test2 --cpu-shares 512 centos:7 #分別進入容器,進行壓力測驗 docker exec -it 2e71bd7f3c4c bash yum install -y epel-release yum install stress -y stress -c 4 #產生四個行程,每個行程都反復不停的計算亂數的平方根 #查看容器的運行狀態(動態更新) docker stats


![]()


1.3設定容器系結指定的CPU
#先分配虛擬機4個CPU核數 docker run -itd --name test2 --cpuset-cpus 1,3 centos:7 /bin/bash #進入容器,進行壓力測驗 yum install -y epel-release yum install stress -y stress -c 4 exit #退出容器,執行 top 命令再按 1 查看CPU使用情況,




![]()

二、對記憶體使用進行限制
2.1創建指定物理記憶體的容器
-m(--memory=)選項用于限制容器可以使用的最大記憶體 docker run -itd --name test10 -m 512m centos:7 /bin/bash docker stats

![]()
![]()
2.2創建指定物理記憶體和swap的容器
docker run -itd --name test11 -m 512m --memory-swap 1g centos:7 /bin/bash 強調一下,--memory-swap是必須要與--memory一起使用的 正常情況下,--memory-swap的值包含容器可用記憶體和可用swap 所以-m 300m --memory-swap=1g 的含義為:容器可以使用300M 的物理記憶體,并且可以使用700M (1G - 300M)的swap 如果--memory-swap設定為0或者不設定,則容器可以使用的swap大小為-m值的兩倍 如果--memory-swap的值和-m值相同,則容器不能使用swap 如果--memory-Swap值為-1,它表示容器程式使用的記憶體受限,而可以使用的swap空間使用不受限制(宿主機有多少,swap容器就可以使用多少)


2.3對磁盤IO配額控制(blkio)的限制
2.3.1設定限制項
--device-read-bps:限制某個設備上的讀速度bps(資料量),單位可以是kb、mb(M)或者gb, 例:docker run -itd --name test1 --device-read-bps /dev/sda:1M centos:7 /bin/bash --device-write-bps : 限制某個設備上的寫速度bps(資料量),單位可以是kb、mb(M)或者gb, 例:docker run -itd --name test1 --device-write-bps /dev/sda:1mb centos:7 /bin/bash --device-read-iops :限制讀某個設備的iops(次數) --device-write-iops :限制寫入某個設備的iops(次數)
2.3.2創建容器,并限制寫速度
![]()
2.3.3通過dd來驗證寫速度
docker exec -it test13 bash #進入容器 dd if=/dev/zero of=test.out bs=1M count=50 oflag=direct #添加oflag引數以規避掉檔案系統cache

2.4清理docker占用的磁盤
docker system prune -a #可以用于清理磁盤,洗掉關閉的容器、無用的資料卷和網路



轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/540200.html
標籤:其他
上一篇:Docker網路模式
