docker的資源控制管理——Cgroups

目錄

一、對CPU使用率的控制

1.1?CPU 資源控制

1.2?cgroups有四大功能?

1.3 設置cpu使用率上限

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

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

1.4 設置cpu資源占用比(設置多個容器時才有效)

創建兩個容器設置比例然后壓測

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

1.5 設置容器綁定指定的cpu

二、內存資源控制

三、磁盤IO配額控制

3.1、限制Block IO

3.2、限制bps和iops進行限制


一、對CPU使用率的控制

1.1?CPU 資源控制

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

1.2?cgroups有四大功能?

  • 資源限制:可以對任務使用的資源總額進行限制
  • 優先級分配:通過分配的cpu時間片數量以及磁盤IO帶寬大小,實際上相當于控制了任務運行優先級
  • 資源統計:可以統計系統的資源使用量,如cpu時長,內存用量等
  • 任務控制:cgroup可以對任務執行掛起、恢復等操作

1.3 設置cpu使用率上限

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

  • 我們可以設置每個容器進程的調度周期,以及在這個周期內各個容器最多能使用多少cpu時間
  • 使用--cpu-period即可設置調度周期,默認100ms,設置范圍為:1ms-1s,對應的--cpu-period的數值范圍是1000~10000000
  • 使用--cpu-quota即可設置在每個周期內容器能使用cpu時間,默認無限制,設置的要求不能小于1ms,也就是--cpu-quota的值必須>=1000

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

Linux通過CFS(Completely Fair Scheduler,完全公平調度器)來調度各個進程對CPU的使用。CFS默認的調度周期是100ms。
我們可以設置每個容器進程的調度周期,以及在這個周期內各個容器最多能使用多少 CPU 時間。使用 --cpu-period 即可設置調度周期,使用 --cpu-quota 即可設置在每個周期內容器能使用的CPU時間。兩者可以配合使用。
CFS 周期的有效范圍是 1ms~1s,對應的 --cpu-period 的數值范圍是 1000~1000000。 周期100毫秒 
而容器的 CPU 配額必須不小于 1ms,即 --cpu-quota 的值必須 >= 100
docker run -itd --name test1 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
#查看調度周期是多久//cpu.cfg_period_us: cpu 分配的周期(微秒,所以文件名中用us表示),默認為100000
//cpu.cfg_quota_us: 表示該cgroups限制占用的時間(微秒),默認為-1,表示為不限制,如果設為50000,表示占用50000/100000=50%的cpu
  • cpu.cfs_period_us:cpu分配的周期(微秒,所以文件名中用 us 表示),默認為100000。
  • cpu.cfs_quota_us:表示該cgroups限制占用的時間(微秒),默認為-1,表示不限制。 如果設為50000,表示占用50000/100000=50%的CPU。?

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

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

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

?

1.4 設置cpu資源占用比(設置多個容器時才有效)

Docker通過-cpu-share指定cpu份額,默認為1024,值為1024的倍數

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

? ? ?

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

創建兩個容器設置比例然后壓測

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

?

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

分別進入容器,進行壓力測試
yum install -y epel-release
yum install -y stress
stress -c 4				#產生四個進程,每個進程都反復不停的計算隨機數的平方根

再開一個終端查看? docker stats?

?

1.5 設置容器綁定指定的cpu

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

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

?

?

?

另一個終端top查看?

?

?

二、內存資源控制

與操作系統類似,容器可以使用的內存包括兩部分:物理內存和Swap

Docker通過下面兩組參數來控制容器內存的使用量

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

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

  • 如果–memory-swap 設置為0 或者不設置,則容器可以使用的swap大小為-m值的兩倍。
  • 如果 --memory-swap 的值和-m 值相同,則容器不能使用swap
  • 如果 --memory-swap值為-1。它表示容器程序使用的內存受限,而可以使用的swap空間不受限制(宿主機有多少swap空間該容器就可以使用多少)

?
?

docker run -itd --name m1 -m 200m --memory-swap=300M centos:7 /bin/bash
#允許該容器使用物理內存200M,swap空間為100mdocker stats
#查看容器使用資源情況

?

?

三、磁盤IO配額控制

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

3.1、限制Block IO

默認情況下,所有容器能平等地讀寫磁盤,可以通過設置 --blkio-weight 參數來改變容器bliock IO 的優先級。–blkio-weight 與 --cpu-share類似,設置的是相對權重值,默認為500。

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

?

3.2、限制bps和iops進行限制

  • bps 是 byte per second ,表示每秒讀寫的數據量。
  • iops 是 io per second ,表示每秒的輸入輸出量(或讀寫次數)

可以通過以下參數控制容器的bps和iops

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

對寫bps進行限制的測試

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

清理docker占用的磁盤空間

docker system prune -a#可以用于清理磁盤,刪除關閉的容器、無用的數據卷和網絡

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41290.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41290.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41290.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跨境外貿業務,選擇動態IP還是靜態IP?

在跨境業務中,代理IP是一個關鍵工具。它們提供了匿名的盾牌,有助于克服網絡服務器針對數據提取設置的限制。無論你是需要經營管理跨境電商店鋪、社交平臺廣告投放,還是獨立站SEO優化,代理IP都可以讓你的業務程度更加絲滑&#xff…

Linux命令 -- vim

Linux命令 -- vim 前言一般模式光標移動復制粘貼內容查找 底線命令行模式 前言 用vim指令進入文件。 剛進入時是命令行模式,也叫一般模式。 按i或者insert進入編輯模式,此時可以編輯文件內容。 按esc可從編輯模式退回到一般模式,輸入冒號進…

基于 spring boot 的動漫信息管理系統【源碼在文末】

半山腰總是最擠的,你得去山頂看看 大學生嘛,論文寫不出,代碼搞不懂不要緊,重要的是,從這一刻就開始學習,立刻馬上! 今天帶來的是最新的選題,基于 spring boot 框架的動漫信息管理系…

Linux系統安裝Google Chrome

1.進入谷歌瀏覽器官網 Google Chrome - Download the Fast, Secure Browser from GoogleGet more done with the new Google Chrome. A more simple, secure, and faster web browser than ever, with Google’s smarts built-in. Download now.http://www.google.cn/intl/en_…

神經網絡基礎-神經網絡補充概念-50-學習率衰減

概念 學習率衰減(Learning Rate Decay)是一種優化算法,在訓練深度學習模型時逐漸減小學習率,以便在訓練的后期更加穩定地收斂到最優解。學習率衰減可以幫助在訓練初期更快地靠近最優解,而在接近最優解時減小學習率可以…

給wordpress添加關鍵詞與描述

Wordpress網站的關鍵字及網頁描述關系網站對搜索引擎的友好程度,如果自己手動加顯然太折騰了,那如何讓WordPress博客自動為每篇文章自動關鍵字及網頁描述。每篇文章的內容不同,我們該如何讓wordpress自動添加文章描述和關鍵詞呢?下…

Azure如何啟用網絡觀察應用程序

文章目錄 基礎概念介紹實操 基礎概念介紹 Azure中的網絡觀察應用程序是一種用于監視和診斷Azure網絡的工具。它提供了一種集中管理和監控網絡流量、連接性和性能的方式。網絡觀察應用程序能夠提供網絡流量分析、連接監視、性能監視和故障診斷等功能,用于幫助管理員…

K8S核心組件etcd詳解(下)

1 k8s如何使用etcd 在k8s中所有對象的manifest都需要保存到某個地方,這樣他們的manifest在api server重啟和失敗的時候才不會丟失。 只有api server能訪問etcd,其它組件只能間接訪問etcd的好處是 增強樂觀鎖系統及驗證系統的健壯性 方便后續存儲的替換…

神經網絡基礎-神經網絡補充概念-43-梯度下降法

概念 梯度下降法(Gradient Descent)是一種優化算法,用于在機器學習和深度學習中最小化(或最大化)目標函數。它通過迭代地調整模型參數,沿著梯度方向更新參數,以逐步接近目標函數的最優解。梯度…

使用 BERT 進行文本分類 (01/3)

攝影:Max Chen on Unsplash 一、說明 這是使用 BERT 語言模型的一系列文本分類演示的第一部分。以文本的分類作為例,演示它們的調用過程。 二、什么是伯特? BERT 代表 來自變壓器的雙向編碼器表示。 首先,轉換器是一種深度學習模…

SpringBoot 操作Redis、創建Redis文件夾、遍歷Redis文件夾

文章目錄 前言依賴連接 RedisRedis 配置文件Redis 工具類操作 Redis創建 Redis 文件夾查詢數據遍歷 Redis 文件夾 前言 Redis 是一種高性能的鍵值存儲數據庫,支持網絡、可基于內存亦可持久化的日志型,而 Spring Boot 是一個簡化了開發過程的 Java 框架。…

【TA 挖坑02】RayMarching SDF 物體黏合

寫在前面 由于實習和忙著論文很久沒經營博客了,最近以各種方式收集到了一些想實現的效果,其中一個就是卡通云融合、變大變小、聚散收攏的效果如何實現的問題,這就不得不提擱置了很久的RayMarching... 挖坑!整理一下有幫助的文章…

AWS WAF實戰、優勢對比和缺陷解決

文章目錄 挑戰和目標AWS WAF的優勢AWS WAF的不足我是怎么做的?什么是比較好的AWS WAF設計? 筆者為了解決公司Web站點防御性問題,較為深入的研究AWS WAF的相關規則。面對上千萬的沖突,筆者不得設計出一種能漂亮處理沖突數據WAF規則。 AWS WAF開發人員在…

Cocos2d 項目問題記錄

環境搭建 正常運行 Android 端的 Cocos2d 項目,本機至少需要 Android SDK、NDK 環境、Android Studio 項目報錯總結 CMake Error: CMake was unable to find a build program corresponding to "Ninja" 默認創建工程的 gradle.tools 版本為 3.1.0&…

微服務08-多級緩存

1.什么是多級緩存 傳統的緩存策略一般是請求到達Tomcat后,先查詢Redis,如果未命中則查詢數據庫,如圖: 存在下面的問題: ?請求要經過Tomcat處理,Tomcat的性能成為整個系統的瓶頸 ?Redis緩存失效時,會對數據庫產生沖擊 多級緩存就是充分利用請求處理的每個環節,分…

卷積操作后特征圖尺寸,感受野,參數量的計算

文章目錄 1、輸出特征圖的尺寸大小2、感受野的計算3、卷積核的參數量 1、輸出特征圖的尺寸大小 如果包含空洞卷積,即擴張率dilation rate不為1時: 2、感受野的計算 例如,圖像經過兩個3*3,步長為2的卷積后感受野為: co…

Centos7多臺服務器免密登錄

準備四臺服務器: docker0 docker1 docker2 docker3 在docker0服務器上生成公鑰和私鑰 [rootwww ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory /root/.ssh. Enter passp…

在Gazebo中添加懸浮模型后,利用鍵盤控制其移動方法

前段時間寫了文章,通過修改sdf、urdf模型的方法,在Gazebo中添加懸浮模型方法 / Gazebo中模型如何不因重力下落:在Gazebo中添加懸浮模型方法 / Gazebo中模型如何不因重力下落:修改sdf、urdf模型_sagima_sdu的博客-CSDN博客 今天講…

Leetcode32 最長有效括號

給你一個只包含 ( 和 ) 的字符串&#xff0c;找出最長有效&#xff08;格式正確且連續&#xff09;括號子串的長度。 代碼如下&#xff1a; class Solution {public int longestValidParentheses(String str) {Stack<Integer> s new Stack<>();int res 0;int st…

GrapeCity Documents for Excel, Java Edition Crack

GrapeCity Documents for Excel, Java Edition Crack 增加了對SpreadJS.sjs文件格式的支持&#xff1a; 更快地將大型Microsoft Excel文件轉換為.sjs格式。 使用較小的占用空間保存導出的文件。 將Excel/SpreadJS功能導入SpreadJS/從SpreadJS導出。 從.sjs文件中壓縮的JSON文件…