Docker容器資源控制CGroup的使用
一、CGroups的含義
CGroups是Linux內(nèi)核提供的一 種可以限制單個(gè)進(jìn)程或者多個(gè)進(jìn)程所使用資源的機(jī)制,可以對(duì) CPU、內(nèi)存和磁盤I/O等資源實(shí)現(xiàn)檢制。Docker可使用CGroups提倡的資源限制功能來完成CPU、內(nèi)存等部分的資源控制。
CGroups提供了對(duì)進(jìn)程進(jìn)行分組化管理的功能和接口的基礎(chǔ)結(jié)構(gòu),內(nèi)存或磁盤I/O的分配控制等具體的資源管理功能是通過對(duì)進(jìn)程進(jìn)行分組化管理來實(shí)現(xiàn)的。這些具體的資源管理功能稱為CGroups子系統(tǒng)或控制器,主要通過以下九大子系統(tǒng)實(shí)現(xiàn)。
(1)blkio:為每個(gè)塊設(shè)備設(shè)置I/O限制,如磁盤、光盤和USB等設(shè)備。
(2) cpu:使用調(diào)度程序提供對(duì)CPU的CGroup任務(wù)訪問。
(3) cpuacct:自動(dòng)生成CGroup任務(wù)的CPU資源使用報(bào)告。
(4)cpuset:為CGroup中的任務(wù)分配獨(dú)立CPU (在多核系統(tǒng)中)和內(nèi)存節(jié)點(diǎn)。
(5) devices:允許或拒絕CGroup任務(wù)訪問設(shè)備。
(6) freezer: 暫停和恢復(fù)CGroup任務(wù)。
(7)memory:設(shè)置每個(gè)CGroup任務(wù)使用的內(nèi)存限制,并自動(dòng)生成內(nèi)存資源使用報(bào)告。
(8)net_ clsI: 標(biāo)記每個(gè)網(wǎng)絡(luò)包以供CGroup任務(wù)使用。
(9)ns:命名空間子系統(tǒng)。(namesparce)
二、CGroup的功能和特點(diǎn)
1、CGroups的主要功能
(1) CGroups可實(shí)現(xiàn)對(duì)進(jìn)程組使用的資源總額的限制。例如,使用memory子系統(tǒng)為進(jìn)程組設(shè)定一個(gè)內(nèi)存使用上限, 當(dāng)進(jìn)程組使用的內(nèi)存達(dá)到限額后再申請(qǐng)內(nèi)存時(shí),會(huì)觸發(fā)OOM(OutOfMemory)警告。
(2)CGroups可實(shí)現(xiàn)對(duì)進(jìn)程組的優(yōu)先級(jí)控制。通過分配CPU時(shí)間片數(shù)量及硬盤I/O、帶寬大小可控制進(jìn)程的優(yōu)先級(jí)。例如,使用CPU子系統(tǒng)為某個(gè)進(jìn)程組分配特定cpu share。
(3) CGroups 可實(shí)現(xiàn)對(duì)進(jìn)程組使用的資源數(shù)量的記錄。例如,使用cpuacct子系統(tǒng)可記錄某個(gè)進(jìn)程組使用的CPU時(shí)間。
(4) CGroups 可實(shí)現(xiàn)對(duì)進(jìn)程組的隔離和控制。例如,使用ns子系統(tǒng)對(duì)不同的進(jìn)程組使用不同的namespace,以達(dá)到隔離的目的,使用不同的進(jìn)程組實(shí)現(xiàn)各自的進(jìn)程、網(wǎng)絡(luò)、文件系統(tǒng)掛載空間,也可使用feezer子系統(tǒng)將進(jìn)程組暫停和恢復(fù)。
2、CGroups的特點(diǎn)
(1)控制族群:控制族群是組按照某種標(biāo)準(zhǔn)劃分的進(jìn)程。CGroups中的資源控制都是以控制族群為單位實(shí)現(xiàn)的。一個(gè)進(jìn)程可以加入某個(gè)控制族群中,也可以從一個(gè)進(jìn)程組遷移到另一個(gè)控制族群。一個(gè)進(jìn)程組的進(jìn)程可以使用CGroups以控制族群為單位分配資源,并受到CGroups以控制族群為單位設(shè)定的限制。
(2)層級(jí):控制族群可以組織為hierarchical 的形式,即一棵控制族群樹。子控制組自動(dòng)繼承父節(jié)點(diǎn)的特定屬性,子控制組還可以有自己特定的屬性。
(3)子系統(tǒng):一個(gè)子系統(tǒng)就是一個(gè)資源控制器, 如memory 子系統(tǒng)是一個(gè)內(nèi)存控制器。子系統(tǒng)必須附加到一個(gè)層級(jí)上才能起作用。個(gè)子 系統(tǒng)附加到某個(gè)層級(jí)以后, 這個(gè)層級(jí)上的所有控制族群都受到這個(gè)子系統(tǒng)的控制。
三、實(shí)訓(xùn)
1、利用CGroups實(shí)現(xiàn)CPU資源控制
(1)利用busybox鏡像生成容器,設(shè)置容器調(diào)度的周期為5000,將容器在每個(gè)周期內(nèi)的CPU配額設(shè)置為25000
[root@controller ~]# docker run -dit --name t1 --cpu-period 50000 --cpu-quota 25000 busybox:latest da8f5d80873d6dc349e7aae44ef51571b7c530070b8600468aceaec9c20936ac
(2)利用busybox鏡像生成容器。將容器綁定到CPU上執(zhí)行,設(shè)置容器調(diào)度的周期和周期內(nèi)的CPU配額為50000
[root@controller ~]# docker run -dit --name t2 --cpuset-cpus 0 --cpu-period 50000 --cpu-quota 50000 busybox 8bc68f70004e051b344948717d82acba9e9c1a0f5a15f911fa60394618436e12
(3)利用busybox鏡像生成兩個(gè)容器,設(shè)置第二個(gè)容器的CPU使用率是第一個(gè)容器的兩倍
[root@controller ~]# docker run -dit --name t3 --cpu-quota 1000 busybox 4908f5f5846fc5f269e5a5c7ebf82a4bf53a6f4dacf47753bbbfb2579fccbf88 [root@controller ~]# docker run -dit --name t4 --cpu-quota 2000 busybox 71f56247679674f65c888562f3ea8f90f783a20e25a2a0f803bdb1ebef928aa4
2、利用CGroups實(shí)現(xiàn)內(nèi)存資源控制
(1)利用busybox鏡像生成容器,設(shè)置容器使用的最大內(nèi)存為256MB
[root@controller ~]# docker run -dit --name t5 --memory 256MB busybox 3349f1259d61026be4353a6d9460a5e4f43bd960451547d1c4dd383df292fadc
3、利用CGroups實(shí)現(xiàn)磁盤I/O控制
(1)利用busybox鏡像生成容器,設(shè)置第二個(gè)容器讀這些磁盤的帶寬是第一個(gè)容器兩倍
[root@controller ~]# docker run -dit --name t6 --device-read-bps /dev/sda1:1mb --device-write-bps /dev/sda1:1mb busybox b55bce694ef2a24f029ac9c13afe28510085db2751162d876de1b97e210c1066 [root@controller ~]# docker run -dit --name t7 --device-read-bps /dev/sda1:2mb --device-write-bps /dev/sda1:2mb busybo 79d2920ce67a8c9956d499cff05fc09bee19ab412e419817ea7f220cd6cfc45c
(2)利用busybox鏡像生成容器,設(shè)置容器讀寫速度為30MB/s
[root@controller ~]# docker run -dit --name t8 --device-write-bps /dev/sd2:30mb busybox 70ce52a12add7635fcf082311f5cd719ade0036c0a716ced275a83c4802ea4a2
到此這篇關(guān)于Docker容器資源控制CGroup的使用的文章就介紹到這了,更多相關(guān)Docker容器資源控制CGroup內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker-compose限制容器cpu和內(nèi)存方式
這篇文章主要介紹了docker-compose限制容器cpu和內(nèi)存方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
docker?運(yùn)行花生殼實(shí)現(xiàn)內(nèi)外網(wǎng)穿透的詳細(xì)過程
這篇文章主要介紹了docker?運(yùn)行花生殼實(shí)現(xiàn)內(nèi)外網(wǎng)穿透,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
利用docker搭建php7和nginx運(yùn)行環(huán)境全過程(官方鏡像)
docker提供了在服務(wù)端分布式的部署應(yīng)用,這樣的好處是方便維護(hù)和升級(jí)。下面這篇文章主要給大家介紹了利用docker搭建php7和nginx運(yùn)行環(huán)境的相關(guān)資料,搭建過程中運(yùn)用的是官方鏡像,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05
如何解決安裝docker的yum工具時(shí)報(bào)錯(cuò)問題
在安裝Docker時(shí)遇到y(tǒng)um工具錯(cuò)誤可通過更新yum源解決,先卸載舊Docker,備份原yum源,下載新的CentOS-Base.repo文件到指定目錄,安裝yum工具后,配置Docker的yum源,國內(nèi)用戶建議使用aliyun源以避免訪問異常,安裝并啟動(dòng)Docker,校驗(yàn)是否成功2024-09-09
Docker部署PostgreSQL+PostGIS服務(wù)的實(shí)現(xiàn)
本文介紹了如何使用Docker快速部署PostgreSQL,并手動(dòng)安裝PostGIS模塊,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-12-12
使用 kind 和 Docker 啟動(dòng)本地的 Kubernetes環(huán)境
這篇文章主要介紹了使用 kind 和 Docker 啟動(dòng)本地的 Kubernetes環(huán)境,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
docker通過Dockerfile修改鏡像中tomcat的端口
8080端口會(huì)經(jīng)常出現(xiàn)被占用的情況,本文主要介紹了docker通過Dockerfile修改鏡像中tomcat的端口,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10

