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

