亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

目錄
  • 一、cpu資源控制
    • 1、 設(shè)置cpu使用率上限
    • 2、設(shè)置cpu資源占用比(設(shè)置多個容器時才有效)
    • 3、設(shè)置容器綁定指定的CPU
  • 三、內(nèi)存資源控制
    • 四、磁盤IO配額控制
      • 1、限制Block IO
      • 2、限制bps和iops進行限制

    一、cpu資源控制

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

    cgroups有四大功能

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

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

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

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

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

    docker run -itd --name test5 centos:7 /bin/bash
    #啟動一個centos:7鏡像容器
    
    docker ps -a
    #查看是否啟動成功,并查看pid號
    
    cd /sys/fs/cgroup/cpu/docker/容器PID號
    #進入到該容器的限制目錄中
    
    cat cpu.cfs_quota_us
    #查看每個周期的cpu最大限制時間
    
    cat cpu.cfs_period_us
    #查看調(diào)度周期是多久
    
    //cpu.cfg_period_us: cpu 分配的周期(微秒,所以文件名中用us表示),默認(rèn)為100000
    //cpu.cfg_quota_us: 表示該cgroups限制占用的時間(微秒),默認(rèn)為-1,表示為不限制,如果設(shè)為50000,表示占用50000/100000=50%的cpu
    

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

    進行cpu壓力測試然后修改每個周期的使用cpu的時間,查看cpu使用率

    docker run -itd --name test6 --cpu-quota 50000 centos:7 /bin/bash
    #可以直接創(chuàng)建一個容器并設(shè)置每個周期cpu執(zhí)行的時間
    或者
    docker run -itd --name test7 centos:7 /bin/bash
    cd /sys/fs/cgroup/cpu/docker/【容器pid】
    echo 50000 > cpu.cfs_quota_us
    #也可以先創(chuàng)建一個容器,然后進入到文件中直接修改cpu執(zhí)行的實際的文件名稱
    
    docker exec -it 【容器id】 /bin/bash
    #進入容器
    
    vim /cpu.sh
    #!bin/bash
    i=0
    while true
    do
    let i++
    done
    #創(chuàng)建死循環(huán)腳本,為了進行cpu壓力測試
    
    chmod +x /cpu.sh
    ./cpu.sh
    #執(zhí)行腳本
    
    
    top
    #查看這個容器中腳本占的多少的cpu資源
    

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

     

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

     

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

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

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

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

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

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

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

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

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

    分別進入到c1和c2 容器中,進行壓測

    docker exec -it 【容器id】 /bin/bash
    #進入容器
    
    yum -y install epel-release
    #安裝epel源
    
    yum -y insyall stress
    #安裝cpu壓力測試工具
    
    stress -c 4
    #產(chǎn)生四個進程,每個進程都反復(fù)不停的計算隨機數(shù)的平方根

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

    查看容器磁盤占比

    docker stats 
    #查看容器運行狀態(tài)(動態(tài)更新)
    

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

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

    –cpuset-cpus 是限制容器運行在指定的cpu核心

    • 運行容器運行在哪個CPU核心上,例如主機有4個核心,cpu核心標(biāo)識為0-3,我們一啟動容器,只想讓這臺容器運行在標(biāo)識0和3的兩個CPU核心上,可以使用cpuset來指定。
    docker run -itd --name c3 --cpuset-cpus 1,3 centos:7 /bin/bash
    #啟動一個容器,讓它只使用內(nèi)核1和內(nèi)核3的資源
    
    docker exec -it 【容器id】 /bin/bash
    #進入容器
    
    yum -y install epel-release
    yum -y install stress
    stress -c 4
    #下載壓力測試工具,并測試4個核

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

    top查看cpu使用率

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

    三、內(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 的使用限額 (這個必須要和–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空間不受限制(宿主機有多少swap空間該容器就可以使用多少)
    docker run -itd --name m1 -m 200m --memory-swap=300M centos:7 /bin/bash
    #允許該容器使用物理內(nèi)存200M,swap空間為100m
    
    docker stats
    #查看容器使用資源情況
    

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

    四、磁盤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)先級。–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進行限制

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

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

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

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

    對寫bps進行限制的測試

    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

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

    清理docker占用的磁盤空間

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

    分享到:
    標(biāo)簽:cgroups Docker 服務(wù)器 資源
    用戶無頭像

    網(wǎng)友整理

    注冊時間:

    網(wǎng)站:5 個   小程序:0 個  文章:12 篇

    • 51998

      網(wǎng)站

    • 12

      小程序

    • 1030137

      文章

    • 747

      會員

    趕快注冊賬號,推廣您的網(wǎng)站吧!
    最新入駐小程序

    數(shù)獨大挑戰(zhàn)2018-06-03

    數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

    答題星2018-06-03

    您可以通過答題星輕松地創(chuàng)建試卷

    全階人生考試2018-06-03

    各種考試題,題庫,初中,高中,大學(xué)四六

    運動步數(shù)有氧達人2018-06-03

    記錄運動步數(shù),積累氧氣值。還可偷

    每日養(yǎng)生app2018-06-03

    每日養(yǎng)生,天天健康

    體育訓(xùn)練成績評定2018-06-03

    通用課目體育訓(xùn)練成績評定