溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker如何實現(xiàn)Memory資源限制

發(fā)布時間:2021-12-13 16:15:10 來源:億速云 閱讀:304 作者:小新 欄目:云計算

這篇文章主要為大家展示了“Docker如何實現(xiàn)Memory資源限制”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Docker如何實現(xiàn)Memory資源限制”這篇文章吧。

一:簡介

docker通過cgroup來控制容器使用的資源配額,包括CPU、內(nèi)存、磁盤三大方面,基本覆蓋了常見的資源配額和使用量控制。

cgroup是Control Groups的縮寫,是Linux 內(nèi)核提供的一種可以限制、記錄、隔離進(jìn)程組所使用的物理資源(如 cpu、memory、磁盤IO等等) 的機(jī)制,被LXC、docker等很多項目用于實現(xiàn)進(jìn)程資源控制。cgroup將任意進(jìn)程進(jìn)行分組化管理的 Linux 內(nèi)核功能。cgroup本身是提供將進(jìn)程進(jìn)行分組化管理的功能和接口的基礎(chǔ)結(jié)構(gòu),I/O 或內(nèi)存的分配控制等具體的資源管理功能是通過這個功能來實現(xiàn)的。這些具體的資源管理功能稱為cgroup子系統(tǒng),有以下幾大子系統(tǒng)實現(xiàn):

  1. blkio:設(shè)置限制每個塊設(shè)備的輸入輸出控制。例如:磁盤,光盤以及usb等等。

  2. cpu:使用調(diào)度程序為cgroup任務(wù)提供cpu的訪問。

  3. cpuacct:產(chǎn)生cgroup任務(wù)的cpu資源報告。

  4. cpuset:如果是多核心的cpu,這個子系統(tǒng)會為cgroup任務(wù)分配單獨的cpu和內(nèi)存。

  5. devices:允許或拒絕cgroup任務(wù)對設(shè)備的訪問。

  6. freezer:暫停和恢復(fù)cgroup任務(wù)。

  7. memory:設(shè)置每個cgroup的內(nèi)存限制以及產(chǎn)生內(nèi)存資源報告。

  8. net_cls:標(biāo)記每個網(wǎng)絡(luò)包以供cgroup方便使用。

  9. ns:命名空間子系統(tǒng)。

  10. perf_event:增加了對每group的監(jiān)測跟蹤的能力,即可以監(jiān)測屬于某個特定的group的所有線程以及運行在特定CPU上的線程。

目前docker只是用了其中一部分子系統(tǒng),實現(xiàn)對資源配額和使用的控制。

二:內(nèi)存資源控制

和CPU控制一樣,docker也提供了若干參數(shù)來控制容器的內(nèi)存使用配額,可以控制容器的swap大小、可用內(nèi)存大小等各種內(nèi)存方面的控制。主要有以下參數(shù):

1.--memory: 設(shè)置容器使用的最大內(nèi)存上限。默認(rèn)單位為byte,可以使用K、G、M等帶單位的字符串。

2.-- memory-reservation: 啟用彈性的內(nèi)存共享,當(dāng)宿主機(jī)資源充足時,允許容器盡量多地使用內(nèi)存,當(dāng)檢測到內(nèi)存競爭或者低內(nèi)存時,強(qiáng)制將容器的內(nèi)存降低到memory-reservation所指定的內(nèi)存大小。按照官方說法,不設(shè)置此選項時,有可能出現(xiàn)某些容器長時間占用大量內(nèi)存,導(dǎo)致性能上的損失。

3.--memory-swap: 等于內(nèi)存和swap分區(qū)大小的總和,設(shè)置為-1時,表示swap分區(qū)的大小是無限的。默認(rèn)單位為byte,可以使用K、G、M等帶單位的字符串。如果–memory-swap的設(shè)置值小于–memory的值,則使用默認(rèn)值,為–memory-swap值的兩倍。

4. --memory-swappiness: 控制進(jìn)程將物理內(nèi)存交換到swap分區(qū)的傾向,默認(rèn)系數(shù)為60。系數(shù)越小,就越傾向于使用物理內(nèi)存。值范圍為0-100。當(dāng)值為100時,表示盡量使用swap分區(qū);當(dāng)值為0時,表示禁用容器 swap 功能(這點不同于宿主機(jī),宿主機(jī) swappiness 設(shè)置為 0 也不保證 swap 不會被使用)。

默認(rèn)情況下,容器可以使用主機(jī)上的所有空閑內(nèi)存。

三:舉例

docker run -ti --rm --name mytest --memory 128m  centos:latest /bin/bash

Docker stats <容器ID>

Docker如何實現(xiàn)Memory資源限制

四:IO資源控制

相對于CPU和內(nèi)存的配額控制,docker對磁盤IO的控制相對不成熟,大多數(shù)都必須在有宿主機(jī)設(shè)備的情況下使用。主要包括以下參數(shù):

  • –device-read-bps:限制此設(shè)備上的讀速度(bytes per     second),單位可以是kb、mb或者gb。

  • –device-read-iops:通過每秒讀IO次數(shù)來限制指定設(shè)備的讀速度。

  • –device-write-bps :限制此設(shè)備上的寫速度(bytes per     second),單位可以是kb、mb或者gb。

  • –device-write-iops:通過每秒寫IO次數(shù)來限制指定設(shè)備的寫速度。

  • –blkio-weight:容器默認(rèn)磁盤IO的加權(quán)值,有效值范圍為10-100。

  • –blkio-weight-device: 針對特定設(shè)備的IO加權(quán)控制。其格式為DEVICE_NAME:WEIGHT

以上是“Docker如何實現(xiàn)Memory資源限制”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI