Docker的資源控制

Docker的資源控制:

對容器使用宿主機的資源進行限制。

CPU 內存 磁盤I/O(讀寫性能)

docker使用linux自帶的功能cgroup

control groups是linux內核系統提供的一種可以限制,記錄,隔離進程組所使用的物理資源的一種機制。

docker借助這個機制,來實現資源的控制。

cgroup 本身是提供將進程進行分組化管理的功能和接口的基礎結構。分配控制的機制來實現資源控制。

host:容器和宿主機共用一個網絡命名空間

container:容器和容器之間共用一個網絡命名空間。

其他的資源依然是隔離的。

隔離是基礎

1、CPU資源控制:

Linux通過CFS(Completely Fail Scheduler 完全公平調度器),來調度各個進程對CPU的使用。CFS的調度周期為100ms。

我們也可以自定義容器的調度周期,以及在這個周期時間內,各個容器能夠使用CPU的調度時間。

(注:只能在容器創建時進行限制)

--cpu-period 設置容器調度cpu的周期

--cpu-quota 設置在每個周期內,容器可以使用cpu的時間。

可以配合使用

CFS周期的有效范圍:1ms-1s? ? ? ? --cpu-period? ? 1000-1000000毫秒

容器使用cpu的配額時間必須要大于1ms,--cpu-quota的值,必須是>=1000

配額:

cat cpu.cfs_quota_us

-1

如果配置是-1,那么容器在使用宿主機cpu的時間不做任何限制。

cat cpu.cfs_period_us

100000

CFS調度周期的長度,單位微秒,在每個周期內,容器可以使用指定比例的cpu時間,默認情況下都是100ms(毫秒)。

CFS調度器,100毫秒就是定義了一個周期,在這個周期內,調度任務(容器)的基本時間單位。

100毫秒一次調度容器請求cpu的資源。然后內核把cpu的資源分配給容器。

cpu.cfs_quota_us:調度請求之后,根據配額,內核分配給容器使用cpu的時間。

就是100毫秒調度請求一次,每次只能使用這么多

docker stats test1/id:查看容器的運行占用宿主機資源的情況

docker top test1/id:查看容器內PID和宿主機pid的映射關系

設置容器占用cpu的權重比:需要多個容器才能生效。

docker run -itd --name test3 --cpu-shares 512 centos:7 /bin/bash

docker run -itd --name test4?--cpu-shares 1024?centos:7 /bin/bash

--cpu-shares 指定容器占用cpu的份額。默認權重1024,設置的值只能是1024的倍數。

--cpu-shares 是給每個容器使用cpu設置了相對的權重,權重高的,可以使用cpu的資源更多,但是,如果只有一個容器在運行,即使設置了權重,但是沒有其他更高的權重的容器來占用資源,權重低的容器依然不受限。

#分別進入容器,進行壓力測試
yum install -y epel-release
yum install -y stress

#stress 是一個用于模擬系統負載的工具,它可以測試系統在高負載條件下的穩定性。

stress -c 4?? ??? ??? ??? ?#產生四個進程,每個進程都反復不停的計算隨機數的平方根

#查看容器運行狀態(動態更新)
docker stats
CONTAINER ID ? NAME ? ? ? ? ? ? CPU % ? ? MEM USAGE / LIMIT ? ? MEM % ? ? NET I/O ? ? ? ? ?BLOCK I/O ? ? ? ? PIDS
c3ee18e65852 ? c2 ? ? ? ? ? ? ? 66.50% ? ?5.5MiB / 976.3MiB ? ? 0.56% ? ? 20.4MB / 265kB ? 115MB / 14.2MB ? ?4
bb02d3b345d8 ? c1 ? ? ? ? ? ? ? 32.68% ? ?2.625MiB / 976.3MiB ? 0.27% ? ? 20.4MB / 325kB ? 191MB / 12.7MB ? ?4

設置容器綁定cpu,容器只能使用指定的cpu內核。

docker run -itd --name test5 --cpuset-cpus 1,3

容器占用cpu的時間

容器占用cpu的權重比(多個容器時,才有效,一個容器時,依然不受限)

容器占用cpu的內核數,綁定指定cpu內核給容器使用。

2、內存:限制容器對內存的使用

創建3個容器,分別對這三個容器進行資源限制

centos1? 占用cpu的時間? 10000(10ms),占用cpu的權重? 256? ?占用內存是? 1G?只能使用cpu1

centos2? 占用cpu的時間? ?20000(20ms),占用cpu的權重 512? 占用內存? 2G?只能使用cpu2

centos3??占用cpu的時間? ?30000(30ms),占用cpu的權重 1024? 占用內存512m 只能使用cpu3

3、限制使用SWAP:想要限制容器使用swap,必須和限制內存一塊使用。

先限制內存,再限制swap 兩個相減

如果限制了內存是512,swap是1G,那么容器實際上能夠使用的swap空間,是1G-512m=512M

如果不設置:-m 512m? 實際使用swap的空間是 -m 的兩倍? 512M*2=1G

如果設置 -memory -swap的值,和內存限制一樣,容器就不能使用swap(等于0)

-m 512m -memory-swap=-1,內存首先還是512M,但是容器使用swap空間不再限制。

磁盤I/O配額(了解):

限制容器在磁盤上的讀速度:

docker run -itd --name test9 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

dd if=/dev/zero of=123.txt bs=2M count=5 oflag=direct

oflg=direct

在使用dd 獲取空字符集是從文件系統的緩存當中輸入,速度是比較快的,加了之后就:禁用文件系統緩存,直接把數據寫入磁盤,可以更真實的測試設備的性能,模擬直接寫入物理設備的情況。

限制容器讀取的次數

docker run -itd --name test10 --device-read-iops /dev/sda:100 centos:7 /bin/bash

限制讀取操作,每秒是100次

限制容器寫入的次數(同樣了解即可)

docker run -itd --name test11?--device-write-iops /dev/sda:50 centos:7 /bin/bash

限制寫入的操作,每秒是50次

清理docker占用的磁盤空間

docker system prune -a

刪除已經停止的容器

刪除所有未被使用的網橋設備(docker0、docker1)

刪除所有未被使用的鏡像

刪除創建容器時的緩存,以及無用的數據卷。

總結:

怎么對容器使用cpu進行限制:

1、容器占用cpu的時間

2、容器占用cpu的權重

3、容器綁定cpu

容器對宿主機的內存使用限制

-m?

swap:必須和限制內存一塊使用

-m 512m --memory-swap=1g

(1g-512=512)

-m 512m?--memory-swap=512m

相等就是0

-m 512m

不寫就是兩倍(512m*2=1024m)

-m 512m --memory-swap=-1

-1就是不限制

磁盤I/O:

清理docker占用的磁盤空間:

docker system prune -a

刪除已經停止的容器

刪除所有未被使用的網橋設備(docker0、docker1)

刪除所有未被使用的鏡像

刪除創建容器時的緩存,以及無用的數據卷。

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

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

相關文章

go grpc高級用法

文章目錄 錯誤處理常規用法進階用法原理 多路復用元數據負載均衡壓縮數據 錯誤處理 gRPC 一般不在 message 中定義錯誤。畢竟每個 gRPC 服務本身就帶一個 error 的返回值,這是用來傳輸錯誤的專用通道。gRPC 中所有的錯誤返回都應該是 nil 或者 由 status.Status 產…

如何克服微服務測試的挑戰,并最大化收益

多年來,微服務一直是行業趨勢,但組織卻未能從該方法中獲益,并因發布失敗而苦苦掙扎。這些失敗通常歸結為測試服務之間的接口以獲得預期的質量、安全性和性能的困難。 最終,未能以足夠穩健的方式測試這些 API。一線希望是遺留 SOA…

cookie總結

cookie和session: 一、Cookie和Session二、使用Cookie保存用戶上次的訪問時間。三、Cookie常用方法總結亂碼問題解決: 一、Cookie和Session 會話:用戶從打開瀏覽器到關閉的整個過程就叫1次會話。 比如有的網站登錄過一次,下次再進…

Gitleaks - 一款高效的Github倉庫敏感信息泄露查詢工具

Gitleaks - 一款高效的Github倉庫敏感信息泄露查詢工具 1.工具概述2.安裝3.參數解析4.使用1.工具概述 Gitleaks 是一種 SAST 工具,用于檢測和防止 git 存儲庫中的硬編碼機密,如密碼、API 密鑰和令牌 Gitleaks 是一個開源工具,用于檢測和防止簽入 Git 存儲庫的機密(密碼/A…

使用 Kubernetes 為 CI/CD 流水線打造高效可靠的臨時環境

介紹 在不斷發展的科技世界中,快速構建高質量的軟件至關重要。在真實環境中測試應用程序是及早發現和修復錯誤的關鍵。但是,在真實環境中設置 CI/CD 流水線進行測試可能既棘手又昂貴。 Kubernetes 是一個流行的容器編排平臺,提供臨時環境解決…

【qt】Qt+OpenCv讀取帶有中文路徑的圖片

【opencv4.5.1版本】下載exe解壓即可。。。https://opencv.org/releases/page/2/ 【qt5.15.2】 pro文件 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In order to …

YOLOv8配置文件yolov8.yaml解讀

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 | 接輔導、項目定制 位置 該文件的位置位于 ./ultralytics/cfg/models/v8/yolov8.yaml 模型參數配置 # Parameters nc: 80 # number of classes scales: #…

碩士畢業論文格式修改要點_word

目錄 0、最開始要做的事情1、更改樣式(先善器)2、多級標題(解決自動更新問題必要的基礎設置)2、插入圖片(1)設置一個圖片樣式——“無間隔”(2)插入題注(3)修…

redis.conf詳解之replica-read-only

本文基于 redis_version:6.2.5 用法 控制從節點允許讀寫操作,還是讀操作。 replica-read-only yes 1 注意事項: 默認yes,只讀操作。 replica-read-only支持參數[yes,no],no 支持讀寫操作。 這里說的從節點,是普通…

【flink番外篇】1、flink的23種常用算子介紹及詳細示例(完整版)

Flink 系列文章 一、Flink 專欄 Flink 專欄系統介紹某一知識點,并輔以具體的示例進行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關基礎內容。 2、Flink基礎系列 本部分介紹Flink 的基礎部分,比如術語、架構、編程模型、編程指南、基本的…

小白學java棧的經典算法問題——第四關白銀挑戰

內容1.括號匹配問題2.最小棧3.最大棧 1.括號匹配問題 棧的典型題目還是非常明顯的,括號匹配、表達式計算等等幾乎都少不了棧,本小節我們就看兩個最經典的問題 首先是LeetCode20,鏈接 本道題還是比較簡單的,其中比較麻煩的是如何判斷兩個符…

力扣面試題 08.12. 八皇后(java回溯解法)

Problem: 面試題 08.12. 八皇后 文章目錄 題目描述思路解題方法復雜度Code 題目描述 思路 八皇后問題的性質可以利用回溯來解決,將大問題具體分解成如下待解決問題: 1.以棋盤的每一行為回溯的決策階段,判斷當前棋盤位置能否放置棋子 2.如何判…

hbuilder + uniapp +vue3 開發微信云小程序

1、創建項目: 2、創建項目完成的默認目錄結構: 3、在根目錄新建一個文件夾cloudFns(文件名字隨便),存放云函數源碼: 4、修改manifest.json文件:添加 小程序 appid和cloudfunctionRoot&#xff0…

python的websocket方法教程

WebSocket是一種網絡通信協議,它在單個TCP連接上提供全雙工的通信信道。在本篇文章中,我們將探討如何在Python中使用WebSocket實現實時通信。 websockets是Python中最常用的網絡庫之一,也是websocket協議的Python實現。它不僅作為基礎組件在…

pyside/qt03——人機協同的編程教學—直接面向chatGPT實戰開發(做中學,事上練)

先大概有個草圖框架,一點點豐富 我糾結好久,直接用Python寫UI代碼 還是用designer做UI 再轉Python呢, 因為不管怎么樣都要轉成Python代碼, 想了想還是學一下designer吧,有個中介,有直觀理解。 直接這樣也可…

智能優化算法應用:基于食肉植物算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用:基于食肉植物算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用:基于食肉植物算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.食肉植物算法4.實驗參數設定5.算法結果6.參考…

設計并實現一個多線程圖書館管理系統,涉及數據庫操作

沒有實現全部功能,希望路過的大佬,可以實現全部功能,在評論區聊聊 創建數據庫library-demo CREATE DATABASE library-demo創建圖書表book CREATE TABLE book (bookId int(11) NOT NULL AUTO_INCREMENT COMMENT 圖書ID,bookName varchar(15)…

QUIC協議對比TCP網絡性能測試模擬弱網測試

QUIC正常外網壓測數據---時延diff/ms如下圖: QUIC弱網外網壓測數據 TCP正常外網壓測數據 TCP弱網外網壓測數據 結論: 在弱網情況下,TCP和QUIC協議的表現會有所不同。下面是它們在弱網環境中的性能對比: 連接建立:…

HarmonyOS創建JavaScript(類 Web開發模式)項目

上文 HarmonyOS帶大家創建自己的第一個Page頁面并實現路由跳轉(ArkTS)帶大家創建了我們項目中第一個自己創建的page 并完成了一個跳轉邏輯的編寫 上文的開發模式是 ArkTS 的 也被稱為 聲明式開發范式 還有一種 javaScript的 類Web開發模式 這種方式就類似于我們傳統的前端開發模…

基于微群機器人的二次開發

請求URL: http://域名地址/modifyGroupName 請求方式: POST 請求頭Headers: Content-Type:application/jsonAuthorization:login接口返回 參數: 參數名必選類型說明wId是String登錄實例標識chatRoom…