Docker Memory資源限制
一:簡介
docker透過cgroup來控制容器使用的資源配額,包括CPU、記憶體、磁碟三大方面,基本覆蓋了常見的資源配額和使用量控制。
cgroup是Control Groups的縮寫,是Linux 核心提供的一種可以限制、記錄、隔離程式組所使用的物理資源(如 cpu、memory、磁碟IO等等) 的機制,被LXC、docker等很多專案用於實現程式資源控制。cgroup將任意程式進行分組化管理的 Linux 核心功能。cgroup本身是提供將程式進行分組化管理的功能和介面的基礎結構,I/O 或記憶體的分配控制等具體的資源管理功能是透過這個功能來實現的。這些具體的資源管理功能稱為cgroup子系統,有以下幾大子系統實現:
- blkio:設定限制每個塊裝置的輸入輸出控制。例如:磁碟,光碟以及usb等等。
- cpu:使用排程程式為cgroup任務提供cpu的訪問。
- cpuacct:產生cgroup任務的cpu資源報告。
- cpuset:如果是多核心的cpu,這個子系統會為cgroup任務分配單獨的cpu和記憶體。
- devices:允許或拒絕cgroup任務對裝置的訪問。
- freezer:暫停和恢復cgroup任務。
- memory:設定每個cgroup的記憶體限制以及產生記憶體資源報告。
- net_cls:標記每個網路包以供cgroup方便使用。
- ns:名稱空間子系統。
- perf_event:增加了對每group的監測跟蹤的能力,即可以監測屬於某個特定的group的所有執行緒以及執行在特定CPU上的執行緒。
目前docker只是用了其中一部分子系統,實現對資源配額和使用的控制。
二:記憶體資源控制
和CPU控制一樣,docker也提供了若干引數來控制容器的記憶體使用配額,可以控制容器的swap大小、可用記憶體大小等各種記憶體方面的控制。主要有以下引數:
1.--memory: 設定容器使用的最大記憶體上限。預設單位為byte,可以使用K、G、M等帶單位的字串。
2.-- memory-reservation: 啟用彈性的記憶體共享,當宿主機資源充足時,允許容器儘量多地使用記憶體,當檢測到記憶體競爭或者低記憶體時,強制將容器的記憶體降低到memory-reservation所指定的記憶體大小。按照官方說法,不設定此選項時,有可能出現某些容器長時間佔用大量記憶體,導致效能上的損失。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Docker CPU資源限制Docker
- Docker的資源限制Docker
- 容器技術之Docker資源限制Docker
- Docker CPU 資源限制——CPU分片功能測試Docker
- Docker系列09—Docker的系統資源限制及驗證Docker
- docker筆記34-容器資源需求、資源限制及HeapSterDocker筆記
- Docker CPU 資源限制——CPU固定核功能測試Docker
- 如何使用 Docker 來限制 CPU、記憶體和 IO等資源?Docker記憶體
- Java Memory Model文件資源整理Java
- 修改profile實現資源限制
- Docker資源收錄Docker
- profile資源限制基礎記載
- setrlimit函式限制程序資源MIT函式
- Kubernetes資源請求與限制
- 【LINUX】linux相關資源限制Linux
- 如何設定Kubernetes資源限制
- 利用資源限制效能診斷resource limitMIT
- Docker執行資源控制Docker
- Docker資源網站集合Docker網站
- 在Openjdk 8 中如何合理使用容器 memory 資源JDK
- 深入理解Kubernetes資源限制:CPU
- Oracle profile 使用者資源限制 說明Oracle
- Oracle的過載保護-資料庫資源限制Oracle資料庫
- 【實戰】Docker容器資源管理Docker
- JVM 如何獲取當前容器的資源限制?JVM
- 資源限制類問題的常用解決方案
- redis限制請求頻率及資源隔離Redis
- 關於linux 資源限制 limits.confLinuxMIT
- AIX 使用者的系統資源使用限制AI
- Docker實踐(5)—資源隔離Docker
- 【MEMORY】Oracle記憶體結構資源常用檢視及sqlOracle記憶體SQL
- 深入理解Kubernetes資源限制:記憶體記憶體
- 白話 Linux 容器資源的隔離限制原理Linux
- 第十七篇:獲取 / 修改程式資源限制
- Red Hat Enterprise Linux使用資源的限制Linux
- profile中SESSIONS_PER_USER 資源限制特性測試Session
- Docker 源配置Docker
- Docker 映象源Docker