Docker Memory資源限制

百聯達發表於2017-10-12

一:簡介

docker透過cgroup來控制容器使用的資源配額,包括CPU、記憶體、磁碟三大方面,基本覆蓋了常見的資源配額和使用量控制。

cgroup是Control Groups的縮寫,是Linux 核心提供的一種可以限制、記錄、隔離程式組所使用的物理資源(如 cpu、memory、磁碟IO等等) 的機制,被LXC、docker等很多專案用於實現程式資源控制。cgroup將任意程式進行分組化管理的 Linux 核心功能。cgroup本身是提供將程式進行分組化管理的功能和介面的基礎結構,I/O 或記憶體的分配控制等具體的資源管理功能是透過這個功能來實現的。這些具體的資源管理功能稱為cgroup子系統,有以下幾大子系統實現:

  1. blkio:設定限制每個塊裝置的輸入輸出控制。例如:磁碟,光碟以及usb等等。
  2. cpu:使用排程程式為cgroup任務提供cpu的訪問。
  3. cpuacct:產生cgroup任務的cpu資源報告。
  4. cpuset:如果是多核心的cpu,這個子系統會為cgroup任務分配單獨的cpu和記憶體。
  5. devices:允許或拒絕cgroup任務對裝置的訪問。
  6. freezer:暫停和恢復cgroup任務。
  7. memory:設定每個cgroup的記憶體限制以及產生記憶體資源報告。
  8. net_cls:標記每個網路包以供cgroup方便使用。
  9. ns:名稱空間子系統。
  10. perf_event:增加了對每group的監測跟蹤的能力,即可以監測屬於某個特定的group的所有執行緒以及執行在特定CPU上的執行緒。

目前docker只是用了其中一部分子系統,實現對資源配額和使用的控制。

 

二:記憶體資源控制

 

和CPU控制一樣,docker也提供了若干引數來控制容器的記憶體使用配額,可以控制容器的swap大小、可用記憶體大小等各種記憶體方面的控制。主要有以下引數:


1.--memory: 設定容器使用的最大記憶體上限。預設單位為byte,可以使用K、G、M等帶單位的字串。


2.-- memory-reservation: 啟用彈性的記憶體共享,當宿主機資源充足時,允許容器儘量多地使用記憶體,當檢測到記憶體競爭或者低記憶體時,強制將容器的記憶體降低到memory-reservation所指定的記憶體大小。按照官方說法,不設定此選項時,有可能出現某些容器長時間佔用大量記憶體,導致效能上的損失。


3.--memory-swap: 等於記憶體和swap分割槽大小的總和,設定為-1時,表示swap分割槽的大小是無限的。預設單位為byte,可以使用K、G、M等帶單位的字串。如果–memory-swap的設定值小於–memory的值,則使用預設值,為–memory-swap值的兩倍。

4. --memory-swappiness: 控制程式將實體記憶體交換到swap分割槽的傾向,預設係數為60。係數越小,就越傾向於使用實體記憶體。值範圍為0-100。當值為100時,表示儘量使用swap分割槽;當值為0時,表示禁用容器 swap 功能(這點不同於宿主機,宿主機 swappiness 設定為 0 也不保證 swap 不會被使用)。


預設情況下,容器可以使用主機上的所有空閒記憶體。

三:舉例

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

Docker stats <容器ID>



四:IO資源控制


相對於CPU和記憶體的配額控制,docker對磁碟IO的控制相對不成熟,大多數都必須在有宿主機裝置的情況下使用。主要包括以下引數:

  • –device-read-bps:限制此裝置上的讀速度(bytes per second),單位可以是kb、mb或者gb。
  • –device-read-iops:透過每秒讀IO次數來限制指定裝置的讀速度。
  • –device-write-bps :限制此裝置上的寫速度(bytes per second),單位可以是kb、mb或者gb。
  • –device-write-iops:透過每秒寫IO次數來限制指定裝置的寫速度。
  • –blkio-weight:容器預設磁碟IO的加權值,有效值範圍為10-100。
  • –blkio-weight-device: 針對特定裝置的IO加權控制。其格式為DEVICE_NAME:WEIGHT

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2145875/,如需轉載,請註明出處,否則將追究法律責任。

相關文章