最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于docker?cgroups資源限制的問題

 更新時(shí)間:2022年09月19日 11:44:04   作者:yu.deqiang  
cgroups是一個(gè)非常強(qiáng)大的linux內(nèi)核工具,他不僅可以限制被namespace隔離起來的資源,還可以為資源設(shè)置權(quán)重、計(jì)算使用量,這篇文章主要介紹了docker?cgroups資源限制,需要的朋友可以參考下

一、cpu資源控制

cgroups是一個(gè)非常強(qiáng)大的linux內(nèi)核工具,他不僅可以限制被namespace隔離起來的資源,還可以為資源設(shè)置權(quán)重、計(jì)算使用量,操控進(jìn)程啟停等等,所以cgroups(control groups)實(shí)現(xiàn)了對資源的配額和度量。

cgroups有四大功能

  • 資源限制: 可以對任務(wù)使用的資源總額進(jìn)行限制
  • 優(yōu)先級(jí)分配: 通過分配cpu時(shí)間片數(shù)量以及磁盤IO帶寬大小,實(shí)際上相當(dāng)于控制了任務(wù)運(yùn)行優(yōu)先級(jí)。
  • 資源統(tǒng)計(jì): 可以統(tǒng)計(jì)系統(tǒng)的資源使用量,如cpu時(shí)長,內(nèi)存用量等。
  • 任務(wù)控制: cgroups可以對任務(wù)執(zhí)行掛起,恢復(fù)等操作。

1、 設(shè)置cpu使用率上限

linux通過CFS(completely fair scheduler,完全公平調(diào)度器)來調(diào)度各個(gè)進(jìn)程對cpu的使用

  • 我們可以設(shè)置每個(gè)容器進(jìn)程的調(diào)度周期,以及在這個(gè)周期內(nèi)各個(gè)容器最多能使用多少cpu時(shí)間。
  • 使用 --cpu-period 即可設(shè)置調(diào)度周期,默認(rèn)100ms,設(shè)置范圍為:1ms-1s,對應(yīng)的 --cpu-period的數(shù)值范圍是1000~1000000。
  • 使用 --cpu-quota 即可設(shè)置在每個(gè)周期內(nèi)容器能使用cpu時(shí)間,默認(rèn)無限制,設(shè)置的要求不能小于1ms,也就是–cpu-quota的值必須>=1000.

查看周期限制和cpu配額限制

docker run -itd --name test5 centos:7 /bin/bash
#啟動(dòng)一個(gè)centos:7鏡像容器

docker ps -a
#查看是否啟動(dòng)成功,并查看pid號(hào)

cd /sys/fs/cgroup/cpu/docker/容器PID號(hào)
#進(jìn)入到該容器的限制目錄中

cat cpu.cfs_quota_us
#查看每個(gè)周期的cpu最大限制時(shí)間

cat cpu.cfs_period_us
#查看調(diào)度周期是多久

//cpu.cfg_period_us: cpu 分配的周期(微秒,所以文件名中用us表示),默認(rèn)為100000
//cpu.cfg_quota_us: 表示該cgroups限制占用的時(shí)間(微秒),默認(rèn)為-1,表示為不限制,如果設(shè)為50000,表示占用50000/100000=50%的cpu

進(jìn)行cpu壓力測試然后修改每個(gè)周期的使用cpu的時(shí)間,查看cpu使用率

docker run -itd --name test6 --cpu-quota 50000 centos:7 /bin/bash
#可以直接創(chuàng)建一個(gè)容器并設(shè)置每個(gè)周期cpu執(zhí)行的時(shí)間
或者
docker run -itd --name test7 centos:7 /bin/bash
cd /sys/fs/cgroup/cpu/docker/【容器pid】
echo 50000 > cpu.cfs_quota_us
#也可以先創(chuàng)建一個(gè)容器,然后進(jìn)入到文件中直接修改cpu執(zhí)行的實(shí)際的文件名稱

docker exec -it 【容器id】 /bin/bash
#進(jìn)入容器

vim /cpu.sh
#!bin/bash
i=0
while true
do
let i++
done
#創(chuàng)建死循環(huán)腳本,為了進(jìn)行cpu壓力測試

chmod +x /cpu.sh
./cpu.sh
#執(zhí)行腳本


top
#查看這個(gè)容器中腳本占的多少的cpu資源

 

 

2、設(shè)置cpu資源占用比(設(shè)置多個(gè)容器時(shí)才有效)

Docker通過–cpu-shares指定cpu份額,默認(rèn)為1024,值為1024的倍數(shù)。

  • 在有多個(gè)容器競爭CPU時(shí),我們可以設(shè)置每個(gè)容器能會(huì)用的CPU時(shí)間比例,這個(gè)比例叫做 共享權(quán)值。
  • 共享式CPU資源,是按比例切分CPU資源,Docker默認(rèn)每個(gè)容器的權(quán)值為1024。如果不指定或?qū)⑵湓O(shè)置為0,都將使用默認(rèn)值。
  • 通過-cpu-share并不是cpu資源的絕對數(shù)量,而是一個(gè)相對的權(quán)重值,某個(gè)容器最終能分配到的cpu資源取決于它的cpu share占所有容器 cpu share綜合的比例。換句話說,通過cpu share可以設(shè)置容器使用cpu的優(yōu)先級(jí)。

比如,當(dāng)前系統(tǒng)上一共運(yùn)行了兩個(gè)容器,第一個(gè)容器上權(quán)重是1024,第二個(gè)容器權(quán)重是512, 第二個(gè)容器啟動(dòng)之后沒有運(yùn)行任何進(jìn)程,自己身上的512都沒有用完,而第一臺(tái)容器的進(jìn)程有很多,這個(gè)時(shí)候它完全可以占用容器二的CPU空閑資源,這就是共享式CPU資源;如果容器二也跑了進(jìn)程,那么就會(huì)把自己的512給要回來,按照正常權(quán)重1024:512劃分,為自己的進(jìn)程提供CPU資源。如果容器二不用CPU資源,那容器一就能夠把容器二的CPU資源所占用,如果容器二也需要CPU資源,那么就按照比例劃分。那么第一個(gè)容器會(huì)從原來使用整個(gè)宿主機(jī)的CPU變?yōu)槭褂谜麄€(gè)宿主機(jī)的CPU的2/3;這就是CPU共享式,也證明了CPU為可壓縮性資源。

兩個(gè)容器設(shè)置比例然后壓測

docker run -itd --name c1 --cpu-shares 512 centos:7
docker run -itd --name c2 --cpu-shares 1024 centos:7
#創(chuàng)建兩個(gè)容器為c1和c2,若只有這兩個(gè)容器,設(shè)置容器的權(quán)重,使得c1和c2的cpu資源占比為1/3和2/3

分別進(jìn)入到c1和c2 容器中,進(jìn)行壓測

docker exec -it 【容器id】 /bin/bash
#進(jìn)入容器

yum -y install epel-release
#安裝epel源

yum -y insyall stress
#安裝cpu壓力測試工具

stress -c 4
#產(chǎn)生四個(gè)進(jìn)程,每個(gè)進(jìn)程都反復(fù)不停的計(jì)算隨機(jī)數(shù)的平方根

查看容器磁盤占比

docker stats 
#查看容器運(yùn)行狀態(tài)(動(dòng)態(tài)更新)

3、設(shè)置容器綁定指定的CPU

–cpuset-cpus 是限制容器運(yùn)行在指定的cpu核心

  • 運(yùn)行容器運(yùn)行在哪個(gè)CPU核心上,例如主機(jī)有4個(gè)核心,cpu核心標(biāo)識(shí)為0-3,我們一啟動(dòng)容器,只想讓這臺(tái)容器運(yùn)行在標(biāo)識(shí)0和3的兩個(gè)CPU核心上,可以使用cpuset來指定。
docker run -itd --name c3 --cpuset-cpus 1,3 centos:7 /bin/bash
#啟動(dòng)一個(gè)容器,讓它只使用內(nèi)核1和內(nèi)核3的資源

docker exec -it 【容器id】 /bin/bash
#進(jìn)入容器

yum -y install epel-release
yum -y install stress
stress -c 4
#下載壓力測試工具,并測試4個(gè)核

top查看cpu使用率

三、內(nèi)存資源控制

與操作系統(tǒng)類似,容器可以使用的內(nèi)存包括兩部分:物理內(nèi)存和Swap

Docker通過下面兩組參數(shù)來控制容器內(nèi)存的使用量

  • -m 或 --memory : 設(shè)置內(nèi)存的使用限額, 例如:100MB,2GB
  • –memory-swap : 設(shè)置內(nèi)存+swap 的使用限額 (這個(gè)必須要和–memory一起使用)

正常情況下,–memory-swap 的值包含容器可用內(nèi)存和可用swap。所以 -m 300m --memory-swap=1g 的含義為:容器可用使用300M的物理內(nèi)存,并且可以使用700M(1G-300)的swap。

  • 如果–memory-swap 設(shè)置為0 或者不設(shè)置,則容器可以使用的swap大小為-m值的兩倍。
  • 如果 --memory-swap 的值和-m 值相同,則容器不能使用swap
  • 如果 --memory-swap值為-1。它表示容器程序使用的內(nèi)存受限,而可以使用的swap空間不受限制(宿主機(jī)有多少swap空間該容器就可以使用多少)
docker run -itd --name m1 -m 200m --memory-swap=300M centos:7 /bin/bash
#允許該容器使用物理內(nèi)存200M,swap空間為100m

docker stats
#查看容器使用資源情況

四、磁盤IO配額控制

Block IO 是另一種可以限制容器使用的資源,Block IO 指的是磁盤的讀寫,docker可通過設(shè)置權(quán)重,限制bps和iops的方式控制容器讀寫磁盤的帶寬。

1、限制Block IO

默認(rèn)情況下,所有容器能平等地讀寫磁盤,可以通過設(shè)置 --blkio-weight 參數(shù)來改變?nèi)萜鱞liock IO 的優(yōu)先級(jí)。–blkio-weight 與 --cpu-share類似,設(shè)置的是相對權(quán)重值,默認(rèn)為500。

docker run -it --name b1 --blkio-weight 600 /bin/bash
docker run -it --name b2 --blkio-weight 300 /bin/bash
#上面兩條中,b1容器讀寫磁盤的帶寬是b2容器的兩倍

2、限制bps和iops進(jìn)行限制

bps 是 byte per second ,表示每秒讀寫的數(shù)據(jù)量。

iops 是 io per second ,表示每秒的輸入輸出量(或讀寫次數(shù))

可以通過以下參數(shù)控制容器的bps和iops

  • –device-read-bps,限制讀某個(gè)設(shè)備的bps(數(shù)據(jù)量)
  • –device-write-bps,限制寫某個(gè)設(shè)備的bps(數(shù)據(jù)量)
  • –device-read-iops,限制讀某個(gè)設(shè)備的iops(次數(shù))
  • –device-write-iops,限制寫某個(gè)設(shè)備的iops(次數(shù))

對寫bps進(jìn)行限制的測試

docker run -it --name b1 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
#創(chuàng)建容器,限制寫的數(shù)數(shù)據(jù)量為1mb/s
dd if=/dec/zero of=test.out bs=1M count=10 oflag=direct
#測試是否是寫入的1MB/S

清理docker占用的磁盤空間

docker system prune -a
#可以用于清理磁盤,刪除關(guān)閉的容器、無用的數(shù)據(jù)卷和網(wǎng)絡(luò)

到此這篇關(guān)于docker cgroups資源限制的文章就介紹到這了,更多相關(guān)docker資源限制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker?日志管理的實(shí)現(xiàn)示例

    Docker?日志管理的實(shí)現(xiàn)示例

    Docker提供了多種日志驅(qū)動(dòng)來管理和提取容器日志,包括json-file、syslog、fluentd等,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Docker容器如何查看ip地址的實(shí)現(xiàn)方法

    Docker容器如何查看ip地址的實(shí)現(xiàn)方法

    這篇文章主要介紹了Docker容器如何查看ip地址的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • docker啟動(dòng)nginx無法訪問的問題解決

    docker啟動(dòng)nginx無法訪問的問題解決

    本文主要介紹了docker啟動(dòng)nginx無法訪問的問題解決,主要遇到404錯(cuò)誤,問題原因是配置文件路徑錯(cuò)誤和權(quán)限問題,下面就來具體介紹一下問題解決,感興趣的可以了解一下
    2025-02-02
  • Docker鏡像瘦身大小從1.43 GB減少到22.4MB

    Docker鏡像瘦身大小從1.43 GB減少到22.4MB

    本文主要介紹了 Docker鏡像瘦身大小從1.43 GB減少到22.4MB,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • docker打包python鏡像的全教程分享

    docker打包python鏡像的全教程分享

    Docker是一種開源的容器化平臺(tái),可以讓開發(fā)者將應(yīng)用程序和其依賴項(xiàng)打包到一個(gè)可移植的容器中,然后在不同的環(huán)境中運(yùn)行,本文主要給大家介紹了docker打包python鏡像全教程,需要的朋友可以參考下
    2024-02-02
  • Docker安裝MongoDB并使用Navicat連接的操作方法

    Docker安裝MongoDB并使用Navicat連接的操作方法

    MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,MongoDB最大的特點(diǎn)是它支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,這篇文章主要介紹了Docker安裝MongoDB并使用Navicat連接,需要的朋友可以參考下
    2022-10-10
  • 基于Docker的幾種常用CentOS7鏡像小結(jié)

    基于Docker的幾種常用CentOS7鏡像小結(jié)

    本文主要介紹了使用 Docker 來制作CentOS 環(huán)境的鏡像,并上傳到阿里云的 Docker 鏡像倉庫,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-11-11
  • Docker部署Nginx并配置反向代理

    Docker部署Nginx并配置反向代理

    這篇文章介紹了Docker部署Nginx并配置反向代理的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • SpringCloud與Docker的集成原理解析

    SpringCloud與Docker的集成原理解析

    Docker的核心原理是通過將應(yīng)用程序及其所有依賴項(xiàng)封裝到獨(dú)立的容器中,實(shí)現(xiàn)了跨平臺(tái)、一致性和可移植性,這篇文章主要介紹了SpringCloud-Docker原理解析,需要的朋友可以參考下
    2024-02-02
  • 如何給一個(gè)正在運(yùn)行的Docker容器動(dòng)態(tài)添加Volume

    如何給一個(gè)正在運(yùn)行的Docker容器動(dòng)態(tài)添加Volume

    這篇文章主要介紹了如何給一個(gè)正在運(yùn)行的Docker容器動(dòng)態(tài)添加Volume,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論

菏泽市| 松原市| 仙桃市| 澎湖县| 达孜县| 翼城县| 泉州市| 射洪县| 香港 | 烟台市| 湖北省| 康乐县| 西乡县| 茶陵县| 洛扎县| 高碑店市| 遵化市| 沾益县| 郎溪县| 彭州市| 普洱| 武清区| 巩留县| 阿鲁科尔沁旗| 明星| 定西市| 嘉黎县| 云霄县| 桑日县| 霍州市| 聂荣县| 呼和浩特市| 罗源县| 汉阴县| 昭平县| 长乐市| 祁阳县| 广灵县| 花垣县| 太谷县| 修武县|