Docker資源限制Cgroup的深入理解
1.Cgroup簡(jiǎn)介
_cgroups,是一個(gè)非常強(qiáng)大的linux內(nèi)核工具,他不僅可以限制被namespace隔離起來的資源,
還可以為資源設(shè)置權(quán)重、計(jì)算使用量、操控進(jìn)程啟停等等。所以cgroups (Control groups) 實(shí)現(xiàn)了對(duì)資源的配額和度量。
cgroups有四大功能:
- 資源限制:可以對(duì)任務(wù)使用的資源總額進(jìn)行限制;
- 先級(jí)分配:通過分配的cpu時(shí)間片數(shù)量以及磁盤I0帶寬大小,實(shí)際上相當(dāng)于控制了任務(wù)運(yùn)行優(yōu)先級(jí);
- 資源統(tǒng)計(jì):可以統(tǒng)計(jì)系統(tǒng)的資源使用量,如cpu時(shí)長(zhǎng), 內(nèi)存用量等;
- 任務(wù)控制: cgroup可以對(duì)任務(wù)執(zhí)行掛起、恢復(fù)等操作。
2.CPU資源限制
Linux通過CFS ( Completely Fair Scheduler, 完全公平調(diào)度器)來調(diào)度各個(gè)進(jìn)程對(duì)CPU的使用。CFS默認(rèn)的調(diào)度周期是100ms。
可以設(shè)置每個(gè)容器進(jìn)程的調(diào)度周期,以及在這個(gè)周期內(nèi)各個(gè)容器最多能使用多少CPU時(shí)間。
使用–cpu-period即可設(shè)置調(diào)度周期,使用–cpu-quota即可設(shè)置在每個(gè)周期內(nèi)容器能使用的CPU時(shí)間。兩者可以配合使用。
CFS周期的有效范圍是1ms~1s, 對(duì)應(yīng)的–cpu-period的數(shù)值范圍是1000~1000000。
容器的CPU 配額必須不小于1ms,即–cpu-quota 的值必須>= 1000。
2.1 查看CPU使用率
1.查看默認(rèn)值
[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表示一個(gè)cpu帶寬,單位為微秒。系統(tǒng)總CPU帶寬: cpu核心數(shù) * cfs_period_us #cfs_quota_us表示Cgroup可以使用的cpu的帶寬,單位為微秒。cfs_quota_us為-1,表示使用的CPU不受cgroup限制。cfs_quota_us的最小值為1ms(1000),最大值為1s。
2.2 測(cè)試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 & 另一個(gè)終端使用top查看
2.3 設(shè)置CPU資源占用比(設(shè)置多個(gè)容器時(shí)才有效)
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 #分別進(jìn)入容器,進(jìn)行壓力測(cè)試 docker exec -it test01/02 bash yum install -y epel-release yum install stress -y stress -c 4 #產(chǎn)生四個(gè)進(jìn)程,每個(gè)進(jìn)程都反復(fù)不停的計(jì)算隨機(jī)數(shù)的平方根 #查看容器的運(yùn)行狀態(tài)(動(dòng)態(tài)更新) docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PID #########################################如果容器使用的是centos8可能無法使用yum安裝,按下步驟恢復(fù) 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相同
由上圖可以看見兩個(gè)容器之間的cpu使用比率接近于2:1
(cpu使用率超過100的原因:當(dāng)單個(gè)處理器的使用率達(dá)到100%時(shí)。對(duì)于多個(gè)處理器,這個(gè)數(shù)字將超過100%,您需要乘以主機(jī)可用
的處理器數(shù)量,才能找到理論上限,由于該虛擬機(jī)我分配了兩核心,所以理論使用上線為200%)
3.對(duì)內(nèi)存使用進(jìn)行限制
docker run -itd --name test03 -m 512m centos:latest docker stats
4.對(duì)磁盤IO配額控制(blkio)的限制
#–device - read-bps:限制某個(gè)設(shè)備上的讀速度bps (數(shù)據(jù)量),單位可以是kb、mb (M)或者gb。 docker run -itd --name test04 --device-read-bps /dev/sda:1M centos:latest bash #–device-write-bps :限制某個(gè)設(shè)備上的寫速度bps (數(shù)據(jù)量),單位可以是kb、mb (M)或者gb。 docker run -itd --name test05 --device-write-bps /dev/sda:1M centos:latest bash --device-read-iops :限制讀某個(gè)設(shè)備的iops (次數(shù)) --device-write-iops :限制寫入某個(gè)設(shè)備的iops (次數(shù)) #進(jìn)入容器驗(yàn)證寫入速度 dd if=/dev/zero of=test.txt bs=2M count=5 oflag=direct #添加oflag參數(shù)以規(guī)避掉文件系統(tǒng)cache
到此這篇關(guān)于Docker資源限制Cgroup的深入理解的文章就介紹到這了,更多相關(guān)Docker 資源限制 Cgroup內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Linux?Docker中部署RStudio?Server實(shí)現(xiàn)遠(yuǎn)程訪問的操作
下面介紹在Linux?docker中安裝RStudio?Server并結(jié)合cpolar內(nèi)網(wǎng)穿透工具,實(shí)現(xiàn)遠(yuǎn)程訪問,docker方式安裝可以避免很多問題,一鍵安裝,如設(shè)備沒有安裝docker,需提前安裝docker,對(duì)?Docker部署RStudio?Server相關(guān)知識(shí)感興趣的朋友一起看看吧2023-12-12docker update命令動(dòng)態(tài)更新容器配置
Docker的docker update命令提供了一種在不停止容器的情況下動(dòng)態(tài)調(diào)整其資源配置的能力,從而優(yōu)化性能或滿足特定需求,本文詳細(xì)介紹了docker update命令的使用方法、常用選項(xiàng)如CPU和內(nèi)存限制,感興趣的可以了解一下2024-10-10詳解Docker+Jenkins+Gitlab+Django應(yīng)用部署實(shí)踐
這篇文章主要介紹了Docker+Jenkins+Gitlab+Django應(yīng)用部署實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01docker-compose統(tǒng)一管理多個(gè)容器使用詳解
這篇文章主要為大家介紹了docker-compose統(tǒng)一管理多個(gè)容器使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02使用Dockerfile構(gòu)建java web環(huán)境
用dockerfile構(gòu)建一個(gè)Java的web環(huán)境,主要分為2步,第一步是在鏡像中安裝jdk并配置環(huán)境變量,第二步是安裝tomcat,下面分步驟給大家詳細(xì)介紹,一起看看吧2016-12-12Docker mongoDB 4.2.1 安裝并收集springboot日志的步驟詳解
這篇文章主要介紹了Docker mongoDB 4.2.1 安裝并收集springboot日志,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12阿里云CentOS 6.5 安裝Docker詳細(xì)步驟
這篇文章主要介紹了阿里云CentOS 6.5 安裝Docker的相關(guān)資料,現(xiàn)在都是云時(shí)代和大數(shù)據(jù)時(shí)代,希望大家也能跟著時(shí)代的步伐,需要的朋友可以參考下2016-10-10Docker部署Node.js的實(shí)現(xiàn)示例
本文介紹了在服務(wù)器上使用Docker部署Node.js項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12