目錄
一、cgroups簡介
cgroups有四大功能:
二、cpu時間片的概念
三、對CPU使用的限制
3.1 設(shè)置CPU使用率上限
(1)查看容器的默認(rèn)CPU使用限制
(2)進(jìn)行壓力測試
(3)創(chuàng)建容器時設(shè)置CPU使用時間限制
(4)對已存在的容器進(jìn)行CPU限制
3.2 設(shè)置CPU資源占用比(設(shè)置多個容器時才有效)
(1)創(chuàng)建兩個容器,設(shè)置CPU資源占用比
(2)分別進(jìn)入兩個容器,進(jìn)行壓力測試
(3)查看容器運行狀態(tài),觀察CPU使用占比
3.3 設(shè)置容器綁定指定的CPU(綁核)
四、對內(nèi)存使用的限制
4.1 限制容器可以使用的最大內(nèi)存
4.2 限制容器可用的swap 大小
五、對磁盤IO的配置控制(blkio)的限制
5.1 創(chuàng)建容器,不限制寫速度
5.2 創(chuàng)建容器,并限制寫速度
六、清除docker占用的磁盤空間
總結(jié)
1.對cpu的限制參數(shù)
2.對內(nèi)存的限制
3.對磁盤IO的限制
一、cgroups簡介
cgroups,是一個非常強(qiáng)大的linux內(nèi)核工具,他不僅可以限制被namespace 隔離起來的資源,還可以 為資源設(shè)置權(quán)重、計算使用量、操控進(jìn)程啟停等等。所以cgroups (Control groups) 實現(xiàn)了對資源的配額和度量。
cgroups有四大功能:
- 資源限制:可以對任務(wù)使用的資源總額進(jìn)行限制。
- 優(yōu)先級分配:通過分配的cpu時間片數(shù)量以及磁盤IO帶寬大小,實際上相當(dāng)于控制了任務(wù)運行優(yōu)先級。
- 資源統(tǒng)計:可以統(tǒng)計系統(tǒng)的資源使用量,如cpu時長,內(nèi)存用量等。
- 任務(wù)控制: cgroup可以對任務(wù) 執(zhí)行掛起、恢復(fù)等操作。
二、cpu時間片的概念
時間片即CPU分配給各個程序的時間,每個線程被分配一個時間段,稱作它的時間片,即該進(jìn)程允許運行的時間,使各個程序從表面上看是同時進(jìn)行的。如果在時間片結(jié)束時進(jìn)程還在運行,則CPU將被剝奪并分配給另一個進(jìn)程。如果進(jìn)程在時間片結(jié)束前阻塞或結(jié)束,則CPU當(dāng)即進(jìn)行切換。而不會造成CPU資源浪費。
在宏觀上:我們可以同時打開多個應(yīng)用程序,每個程序并行不悖,同時運行。但在微觀上:由于只有一個CPU,一次只能處理程序要求的一部分,如何處理公平,一種方法就是引入時間片,每個程序輪流執(zhí)行。
三、對CPU使用的限制
3.1 設(shè)置CPU使用率上限
Linux通過CFS (Completely Fair Scheduler, 完全公平調(diào)度器)來調(diào)度各個進(jìn)程對CPU的使用。CFS默認(rèn)的調(diào)度周期是100ms。
我們可以設(shè)置每個容器進(jìn)程的調(diào)度周期,以及在這個周期內(nèi)各個容器最多能使用多少CPU時間。
使用 --cpu-period 即可設(shè)置調(diào)度周期,使用 --cpu-quota 即可設(shè)置在每個周期內(nèi)容器能使用的CPU時間。兩者可以配合使用。
CFS周期的有效范圍是1ms ~ 1s, 對應(yīng)的 --cpu-period 的數(shù)值范圍是 1000 ~1000000 (單位微秒)。
而容器的CPU配額必須不小于1ms,即 --cpu-quota 的值必須 >= 1000。
(1)查看容器的默認(rèn)CPU使用限制
#創(chuàng)建并啟動容器 ?[root@yuji ~]# docker run -itd --name test1 centos:7 /bin/bash ?WARNING: IPv4 forwarding is disabled. Networking will not work. ?059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08 ??#查看容器狀態(tài) ?[root@yuji ~]# docker ps -a ?CONTAINER ID ??IMAGE ???? COMMAND ??????CREATED ???????? STATUS ???????? PORTS ????NAMES ?059823a1abbe ??centos:7 ??"/bin/bash" ??12 seconds ago ??Up 10 seconds ????????????test1 ?? ?#切換到cgroup下針對容器的相關(guān)配置目錄 ?[root@yuji ~]# cd /sys/fs/cgroup/cpu/docker/ ?[root@yuji docker]# ls ?059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08 ?cpu.cfs_quota_us ?cgroup.clone_children ????????????????????????????????????????????cpu.rt_period_us ?cgroup.event_control ???????????????????????????????????????????? cpu.rt_runtime_us ?cgroup.procs ???????????????????????????????????????????????????? cpu.shares ?cpuacct.stat ???????????????????????????????????????????????????? cpu.stat ?cpuacct.usage ????????????????????????????????????????????????????notify_on_release ?cpuacct.usage_percpu ???????????????????????????????????????????? tasks ?cpu.cfs_period_us ?##切換到test1容器的目錄 ?[root@yuji docker]# cd 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08 ?[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# ls ?cgroup.clone_children ?cgroup.procs ?cpuacct.usage ????????cpu.cfs_period_us ?cpu.rt_period_us ??cpu.shares ?notify_on_release ?cgroup.event_control ??cpuacct.stat ?cpuacct.usage_percpu ?cpu.cfs_quota_us ??cpu.rt_runtime_us ?cpu.stat ?? tasks ?##查看test1容器的CPU使用限額。即每個調(diào)度周期內(nèi)可占用的CPU時間(單位:微秒) ?[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# cat cpu.cfs_quota_us ?-1 ???????????????????????? ? #默認(rèn)為-1,表示不限制 ?##查看CPU調(diào)度周期(單位:微秒) ?[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# cat cpu.cfs_period_us ?100000 ???????????????????????#單位微秒,即100毫秒,0.1秒 ?? ?#cpu.cfs_period_us:分配的周期(微秒,所以文件名中用u),默認(rèn)為100000。 ?#cpu.cfs_quota_us:表示該cgroups限制占用的時間(微秒),默認(rèn)為-1,表示不限制。 ?#cpu.cfs_quota_us 如果設(shè)為50000,表示占用 50000/100000=50%的CPU。
(2)進(jìn)行壓力測試
[root@yuji ~]# docker exec -it test1 bash ????#進(jìn)入容器 ?[root@059823a1abbe /]# vi /cpu.sh ????????#寫個死循環(huán)腳本 ?#!/bin/bash ?i=0 ?while true ?do ????let i++ ?done ?[root@059823a1abbe /]# chmod +x cpu.sh ?? #給腳本權(quán)限 ?[root@059823a1abbe /]# ./cpu.sh ??????????#運行腳本 ?? ?#再開一個終端,查看cpu.sh進(jìn)程的cpu使用率 ?[root@localhost ~]# top ?????????????? ? #可以看到使用率接近100% ????PID USER ???? PR ?NI ?? VIRT ?? RES ?? SHR S ?%CPU %MEM ????TIME+ COMMAND ???3328 root ?????20 ??0 ??11688 ??1100 ???916 R ?99.7 ?0.1 ??7:04.44 cpu.sh ???? ?#之后在容器中使用ctrl+c,停止腳本的執(zhí)行,再top觀察CPU使用率
(3)創(chuàng)建容器時設(shè)置CPU使用時間限制
#創(chuàng)建容器test2,并限制CPU使用時間為50000微秒,表示最多占用50%的CPU。 ?[root@yuji ~]# docker run -itd --name test2 --cpu-quota 50000 centos:7 ?WARNING: IPv4 forwarding is disabled. Networking will not work. ?8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b ?#查看CPU限額文件 ?[root@yuji ~]# cd /sys/fs/cgroup/cpu/docker/ ?[root@yuji docker]# ls ?059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08 ?cpuacct.usage ????????cpu.shares ?8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b ?cpuacct.usage_percpu ?cpu.stat ?cgroup.clone_children ????????????????????????????????????????????cpu.cfs_period_us ????notify_on_release ?cgroup.event_control ???????????????????????????????????????????? cpu.cfs_quota_us ???? tasks ?cgroup.procs ???????????????????????????????????????????????????? cpu.rt_period_us ?cpuacct.stat ???????????????????????????????????????????????????? cpu.rt_runtime_us ?[root@yuji docker]# cd 8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b ?[root@yuji 8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b]# cat cpu.cfs_quota_us ?50000 ?? ?#登錄容器test2,寫個死循環(huán)腳本并運行 ?[root@yuji ~]# docker exec -it test2 bash ?[root@8e7ba758a231 /]# ?vi /cpu.sh ?#!/bin/bash ?i=0 ?while true ?do ??let i++ ?done ?[root@8e7ba758a231 /]# chmod +x cpu.sh ?[root@8e7ba758a231 /]# ./cpu.sh? ?? ?#再開一個終端,查看cpu使用率 ?[root@yuji ~]# top ???????????????? #CPU使用率在50%左右 ??PID USER ???? PR ?NI ?? VIRT ?? RES ?? SHR S ?%CPU %MEM ????TIME+ COMMAND ?3746 root ?????20 ??0 ??11688 ??1096 ???916 R ?50.0 ?0.1 ??1:55.26 cpu.sh ?? ?? ?#容器的CPU使用時間限制設(shè)為50000,而調(diào)度周期為100000,表示容器占用50000/100000=50%的CPU。
(4)對已存在的容器進(jìn)行CPU限制
直接修改 /sys/fs/cgroup/cpu/docker/容器id/cpu.cfs_quota_us 文件即可
#進(jìn)入test1容器目錄,修改CPU使用時間限制 ?[root@yuji ~]# cd /sys/fs/cgroup/cpu/docker/ ?[root@yuji docker]# ls ?059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08 ?cpuacct.usage ????????cpu.shares ?8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b ?cpuacct.usage_percpu ?cpu.stat ?cgroup.clone_children ????????????????????????????????????????????cpu.cfs_period_us ????notify_on_release ?cgroup.event_control ???????????????????????????????????????????? cpu.cfs_quota_us ???? tasks ?cgroup.procs ???????????????????????????????????????????????????? cpu.rt_period_us ?cpuacct.stat ???????????????????????????????????????????????????? cpu.rt_runtime_us ?[root@yuji docker]# cd 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08 ?#修改CPU使用時間限制 ?[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# echo "33000" >cpu.cfs_quota_us ?[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# cat cpu.cfs_quota_us ?33000 ?? ?#此時再進(jìn)入test1容器執(zhí)行之前創(chuàng)建好的腳本,進(jìn)行壓力測試 ?[root@yuji ~]# docker exec -it test1 bash ?[root@059823a1abbe /]# ./cpu.sh ?? ?#再開一個終端,查看cpu使用率 ?[root@localhost ~]# top ??PID USER ???? PR ?NI ?? VIRT ?? RES ?? SHR S ?%CPU %MEM ????TIME+ COMMAND ?4635 root ?????20 ??0 ??11688 ??1096 ???916 R ?33.3 ?0.1 ??1:27.62 cpu.sh ?? ?? ?#容器的CPU使用時間限制設(shè)為33000,而調(diào)度周期為100000,表示容器占用33000/100000=33%的CPU。
3.2 設(shè)置CPU資源占用比(設(shè)置多個容器時才有效)
Docker 通過 --cpu-shares 指定CPU份額,默認(rèn)值為1024,值為1024的倍數(shù)。
(1)創(chuàng)建兩個容器,設(shè)置CPU資源占用比
#先刪除所有容器 ?[root@yuji ~]# docker rm -f $(docker ps -aq) ?9c48e09ea156 ?7c7e024b557e ?? ?#創(chuàng)建兩個容器為c1和c2 ?#只有這2個容器的情況下,cpu資源分?jǐn)偨o這兩個容器,512:1024等于1:2,一個占1/3,一個占2/3。 ?[root@yuji ~]# docker run -itd --name c1 --cpu-shares 512 centos:7 ?WARNING: IPv4 forwarding is disabled. Networking will not work. ?300b50f13ebef4921029e352f5850b1c81f8f8e28827a8d11f20e55eec94642b ?[root@yuji ~]# docker run -itd --name c2 --cpu-shares 1024 centos:7 ?WARNING: IPv4 forwarding is disabled. Networking will not work. ?7a999b00c9eef7fdb916c2914087809e7eba55b1c52aaaabeeda16a4006f57a9 ?[root@yuji ~]# docker ps -a ?CONTAINER ID ??IMAGE ???? COMMAND ??????CREATED ????????STATUS ????????PORTS ????NAMES ?7a999b00c9ee ??centos:7 ??"/bin/bash" ??4 seconds ago ??Up 3 seconds ????????????c2 ?300b50f13ebe ??centos:7 ??"/bin/bash" ??6 seconds ago ??Up 5 seconds ????????????c1
(2)分別進(jìn)入兩個容器,進(jìn)行壓力測試
#宿主機(jī)開啟路由轉(zhuǎn)發(fā)功能,使容器能夠連通外網(wǎng) ?[root@yuji ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf ?[root@yuji ~]# sysctl -p ?net.ipv4.ip_forward = 1 ?? ?#進(jìn)入c1容器,進(jìn)行壓力測試 ?docker exec -it c1 bash ?yum install -y epel-release ???#下載epel源 ?yum install -y stress ?????????#安裝stress工具 ?stress -c 4 ??#產(chǎn)生四個進(jìn)程,每個進(jìn)程都反復(fù)不停地計算隨機(jī)數(shù)的平方根 ?? ?#進(jìn)入c2容器,進(jìn)行壓力測試 ?docker exec -it c2 bash ?yum install -y epel-release ???#下載epel源 ?yum install -y stress ?????????#安裝stress工具 ?stress -c 4 ??#產(chǎn)生四個進(jìn)程,每個進(jìn)程都反復(fù)不停的計算隨機(jī)數(shù)的平方根
進(jìn)入c1容器,進(jìn)行壓力測試:
進(jìn)入c2容器,進(jìn)行壓力測試:
(3)查看容器運行狀態(tài),觀察CPU使用占比
#再打開一個終端,查看容器運行狀態(tài)(動態(tài)更新) ?[root@yuji ~]# docker stats ????#可以看到CPU使用占比大約是1:2 ?CONTAINER ID ??NAME ???? CPU % ????MEM USAGE / LIMIT ????MEM % ????NET I/O ???????? BLOCK I/O ?????? PIDS ?7a999b00c9ee ??c2 ???????266.52% ??188.9MiB / 1.938GiB ??9.52% ????32.8MB / 152kB ??1.91MB / 50MB ???7 ?300b50f13ebe ??c1 ???????133.03% ??203.1MiB / 1.938GiB ??10.24% ???33.7MB / 603kB ??108MB / 51.4MB ??7 ?? ?#因為宿主機(jī)有4核,所以CPU總百分比是400%。 ?#c1:c2 = 133.03%:266.52% ≈ 1:2
3.3 設(shè)置容器綁定指定的CPU(綁核)
注意:CPU編號從0開始。 編號1、3代表第二個核和第四個核 。
#先為虛擬機(jī)分配4個CPU核數(shù) ?? ?#創(chuàng)建容器c3時,綁定1號和3號這兩個CPU ?[root@yuji ~]# docker run -itd --name c3 --cpuset-cpus 1,3 centos:7 /bin/bash ?? ?#進(jìn)入容器,進(jìn)行壓力測試 ?docker exec -it c3 bash ?yum install -y epel-release ???#下載epel源 ?yum install -y stress ?????????#安裝stress工具 ?stress -c 4 ??#產(chǎn)生四個進(jìn)程,每個進(jìn)程都反復(fù)不停地計算隨機(jī)數(shù)的平方根 ?? ?#退出容器,執(zhí)行top命令再按1查看CPU使用情況 ?[root@yuji ~]# top ?? #可以看到CPU1和CPU3占滿,其他CPU使用率為0 ?top - 01:12:49 up ?4:01, ?3 users, ?load average: 3.47, 2.96, 2.49 ?Tasks: 183 total, ??6 running, 177 sleeping, ??0 stopped, ??0 zombie ?%Cpu0 ?: ?0.0 us, ?0.0 sy, ?0.0 ni,100.0 id, ?0.0 wa, ?0.0 hi, ?0.0 si, ?0.0 st ?%Cpu1 ?:100.0 us, ?0.0 sy, ?0.0 ni, ?0.0 id, ?0.0 wa, ?0.0 hi, ?0.0 si, ?0.0 st ?%Cpu2 ?: ?0.0 us, ?0.0 sy, ?0.0 ni,100.0 id, ?0.0 wa, ?0.0 hi, ?0.0 si, ?0.0 st ?%Cpu3 ?:100.0 us, ?0.0 sy, ?0.0 ni, ?0.0 id, ?0.0 wa, ?0.0 hi, ?0.0 si, ?0.0 st ?KiB Mem : ?2031912 total, ??150852 free, ??635800 used, ?1245260 buff/cache ?KiB Swap: ?4194300 total, ?4194236 free, ??????64 used. ?1138692 avail Mem
四、對內(nèi)存使用的限制
4.1 限制容器可以使用的最大內(nèi)存
-m (或--memory=)選項用于限制容器可以使用的最大內(nèi)存
#-m(--memory=)選項用于限制容器可以使用的最大內(nèi)存。 ?? ?#創(chuàng)建容器c4,并限制容器可以使用的最大內(nèi)存為512m ?[root@yuji ~]# docker run -itd --name c4 -m 512m centos:7 /bin/bash ?? ?#查看容器狀態(tài),可以看到c4可以使用的最大內(nèi)存是512M ?[root@yuji ~]# docker stats ?CONTAINER ID ??NAME ???? CPU % ????MEM USAGE / LIMIT ????MEM % ????NET I/O ???????? BLOCK I/O ????????PIDS ?437180fc6266 ??c4 ???????0.00% ????396KiB / 512MiB ??????0.08% ????648B / 0B ?????? 0B / 0B ??????????1 ?ebcc06da3a03 ??c3 ???????0.00% ????174.2MiB / 1.938GiB ??8.78% ????32.8MB / 196kB ??47.7MB / 50.6MB ??1 ?7a999b00c9ee ??c2 ???????0.00% ????101.7MiB / 1.938GiB ??5.13% ????32.9MB / 152kB ??1.91MB / 50MB ????2 ?300b50f13ebe ??c1 ???????0.00% ????113MiB / 1.938GiB ????5.69% ????33.7MB / 603kB ??108MB / 51.4MB ???1
4.2 限制容器可用的swap 大小
#限制可用的swap 大小,--memory-swap ?●強(qiáng)調(diào)一下, --memory-swap是必須要與 --memory(或-m)一起使用的。 ?●正常情況下, --memory-swap 的值包含容器可用內(nèi)存和可用swap 。 ?●所以 -m 300m --memory-swap=1g 的含義為:容器可以使用300M 的物理內(nèi)存,并且可以使用700M (1G - 300M)的swap。 ?? ?設(shè)置為0或者不設(shè)置,則容器可以使用的 swap 大小為 -m 值的兩倍。 ?如果 --memory-swap 的值和 -m 值相同,則容器不能使用swap。 ?如果 --memory-swap 值為 -1,它表示容器程序使用的內(nèi)存受限,而可以使用的swap空間使用不受限制(宿主機(jī)有多少swap 容器就可以使用多少)。
示例:
#--memory-swap 的值包含容器可用內(nèi)存和可用swap,減去-m的值才是可用swap的值。 ?#表示容器可以使用512M的物理內(nèi)存,并且可以使用512M的swap。因為1g減去512m的物理內(nèi)存,剩余值才是可用swap。 ?docker run -itd --name yy01 -m 512m --memory-swap=1g centos:7 bash ?? ?? ?#--memoryswap值和 -m 的值相同,表示容器無法使用swap ?docker run -itd --name yy02 -m 512m --memory-swap=512m centos:7 bash ?? ?? ?# --memory-swap 的值設(shè)置為0或者不設(shè)置,則容器可以使用的 swap 大小為 -m 值的兩倍。 ?docker run -itd --name yy03 -m 512m centos:7 bash ?? ?? ?# --memory-swap 值為 -1,它表示容器程序使用的內(nèi)存受限,但可以使用的swap空間使用不受限制(宿主機(jī)有多少swap 容器就可以使用多少)。 ?docker run -itd --name yy04 -m 512m --memory-swap=-1 centos:7 bash
五、對磁盤IO的配置控制(blkio)的限制
--device-read-bps:限制某個設(shè)備上的讀速度bps ( 數(shù)據(jù)量),單位可以是kb、mb (M)或者gb。
--device-write-bps : 限制某個設(shè)備上的寫速度bps ( 數(shù)據(jù)量),單位可以是kb、mb (M)或者gb。
--device-read-iops :限制讀某個設(shè)備的iops (次數(shù))
--device-write-iops :限制寫入某個設(shè)備的iops ( 次數(shù))
--device-read-bps:限制某個設(shè)備上的讀速度bps ( 數(shù)據(jù)量),單位可以是kb、mb (M)或者gb。
?例: docker run -itd --name test9 --device-read-bps /dev/sda:1M centos:7 /bin/bash
?#表示該容器每秒只能讀取1M的數(shù)據(jù)量
??
?--device-write-bps : 限制某個設(shè)備上的寫速度bps ( 數(shù)據(jù)量),單位可以是kb、mb (M)或者gb。
?例: docker run -itd --name test10 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
?#表示該容器每秒只能寫入1M的數(shù)據(jù)量
??
?--device-read-iops :限制讀某個設(shè)備的iops (次數(shù))
?--device-write-iops :限制寫入某個設(shè)備的iops ( 次數(shù))
5.1 創(chuàng)建容器,不限制寫速度
#創(chuàng)建容器tt01,不限制寫入速度
?docker run -it --name tt01 centos:7 /bin/bash
??
?#通過dd來驗證寫速度,拷貝50M的數(shù)據(jù)
?dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct ??#添加oflag參數(shù)以規(guī)避掉文件系統(tǒng)cache
??
?#創(chuàng)建容器tt01,不限制寫入速度
?[root@yuji ~]# docker run -it --name tt01 centos:7 /bin/bash
?#通過dd來驗證寫速度,拷貝50M的數(shù)據(jù)到容器中
?[root@a62f5b811e58 /]# dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct ??#添加oflag參數(shù)以規(guī)避掉文件系統(tǒng)cache
?5+0 records in
?5+0 records out
?52428800 bytes (52 MB) copied, 0.0948474 s, 553 MB/s
??
?#沒有限制寫速度的情況下,寫入很快,0.09秒的時間內(nèi)已寫入50M的數(shù)據(jù),寫入速度為553M/s。
5.2 創(chuàng)建容器,并限制寫速度
#創(chuàng)建容器,并限制寫入速度為1MB/s,即每秒只能寫入1MB的數(shù)據(jù)量。
?[root@yuji ~]# docker run -it --name tt02 --device-write-bps /dev/sda:1mb centos:7 bash
?#通過dd來驗證寫速度,拷貝50M的數(shù)據(jù)到容器中
?[root@655f6cca0175 /]# dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct ?#添加oflag參數(shù)以規(guī)避掉文件系統(tǒng)cache
?5+0 records in
?5+0 records out
?52428800 bytes (52 MB) copied, 50.0048 s, 1.0 MB/s
??
?#寫入50M的數(shù)據(jù),需要50s左右,因為限制了容器的寫速度是 1.0 MB/s。
六、清除docker占用的磁盤空間
docker system prune -a 可用于清理磁盤,刪除關(guān)閉的容器、無用的數(shù)據(jù)卷和網(wǎng)絡(luò)。
示例:
#查看容器
?[root@yuji ~]# docker ps -a
?CONTAINER ID ??IMAGE ???? COMMAND ??????CREATED ???????? STATUS ???????????????????? PORTS ????NAMES
?655f6cca0175 ??centos:7 ??"bash" ???????10 minutes ago ??Exited (0) 4 minutes ago ???????????? tt02
?a62f5b811e58 ??centos:7 ??"/bin/bash" ??19 minutes ago ??Exited (0) 11 minutes ago ????????????tt01
?437180fc6266 ??centos:7 ??"/bin/bash" ??36 minutes ago ??Up 36 minutes ????????????????????????c4
?ebcc06da3a03 ??centos:7 ??"/bin/bash" ??50 minutes ago ??Up 50 minutes ????????????????????????c3
?#清理磁盤,刪除關(guān)閉的容器、無用的數(shù)據(jù)卷和網(wǎng)絡(luò)。
?[root@yuji ~]# docker system prune -a
?WARNING! This will remove: ??????????????????????????????????#提示
???- all stopped containers ??????????????????????????????????#刪除清理所有停止的容器
???- all networks not used by at least one container ?????????#刪除未被使用的網(wǎng)絡(luò)
???- all images without at least one container associated to them ?#未被使用的鏡像
???- all build cache ????????????????????????????????????????#刪除已建立的緩存
??
?Are you sure you want to continue? [y/N] y ???????????????#是否確定刪除
?Deleted Containers:
?655f6cca01754d27a080e01b64aa26c4f96642ab5b5931b186ad04082a98430f
?a62f5b811e584cc6e8d344830d5df9ddcbdd72761966989245b0c52f6abb9a4a
?......
?Total reclaimed space: 451MB
??
?#再次查看容器,只剩下啟動中的容器
?[root@localhost ~]# docker ps -a
?CONTAINER ID ??IMAGE ???? COMMAND ??????CREATED ???????? STATUS ???????? PORTS ????NAMES
?525d77ff7423 ??centos:7 ??"/bin/bash" ??3 minutes ago ?? Up 3 minutes ???????????? c6
?fb2ee21e0468 ??centos:7 ??"/bin/bash" ??12 minutes ago ??Up 12 minutes ????????????c4
?81e3ea8f526e ??centos:7 ??"/bin/bash" ??18 minutes ago ??Up 18 minutes ????????????c3
總結(jié)
1.對cpu的限制參數(shù)
docker run -cpu-period ????#設(shè)置調(diào)度周期時間1000~1000000
????????????-cpu-quota ?????#設(shè)置容器進(jìn)程的CPU占用時間,要與調(diào)度周期時間成比例
????????????--cpu-shares ???#設(shè)置多個容器之間的CPU資源占用比
????????????--cpuset-cpus ??#綁核(第一個CPU編號從0開始)
2.對內(nèi)存的限制
-m 物理內(nèi)存 [--memory-swap=總值]
文章來源:http://www.zghlxwxcb.cn/news/detail-663937.html
3.對磁盤IO的限制
--device-read-bps 設(shè)備文件:1mb/1M ????#限制讀速度
?--device-write-bps 設(shè)備文件:1mb/1M ???#限制寫速度
?--device-read-iops ??????????????????#限制讀次數(shù)
?--device-write-iops ?????????????????#限制寫次數(shù)
??
?docker system prune -a ???#清理磁盤,刪除關(guān)閉的容器、無用的數(shù)據(jù)卷和網(wǎng)絡(luò)。文章來源地址http://www.zghlxwxcb.cn/news/detail-663937.html
到了這里,關(guān)于【云原生】Docker Cgroups資源控制管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!