Docker執行資源控制

Sierra、發表於2022-06-03
概述

​ 一個 docker host 上會執行若干容器,每個容器都需要 CPU記憶體IO 資源。對於 KVM,VMware 等虛擬化技術,使用者可以控制分配多少 CPU、記憶體資源給每個虛擬機器。對於容器,Docker 也提供了類似的機制避免某個容器因佔用太多資源而影響其他容器乃至整個 host 的效能。

記憶體限額

​ 與作業系統類似,容器可使用的記憶體包括兩部分:實體記憶體和swap

docker run -m 或 --memory設定記憶體的使用限額。docker run --memory-swap 設定記憶體和swap的使用限額。例如當執行命令:docker run -m 100M --memory-swap 200M,該命令表明容器允許使用的最大記憶體為100M,允許使用的swap最大為100M。預設情況下,上面兩組引數為 -1,即對容器記憶體和 swap 的使用沒有限制。

CPU權重

​ 預設設定下,所有容器可以平等地使用 host CPU 資源並且沒有限制。Docker 可以通過 -c--cpu-shares 設定容器使用 CPU 的權重。如果不指定,預設值為 1024。與記憶體限額不同,通過 -c 設定的 cpu share 並不是 CPU 資源的絕對數量,而是一個相對的權重值。某個容器最終能分配到的 CPU 資源取決於它的 cpu share 佔所有容器 cpu share 總和的比例。

Block IO 配置

​ Block IO 是另一種可以限制容器使用的資源。Block IO 指的是磁碟的讀寫,docker 可通過設定權重、限制 bps iops 的方式控制容器讀寫磁碟的頻寬,下面分別討論。

目前 Block IO 限額只對 direct IO(不使用檔案快取)有效。

預設情況下,所有容器能平等地讀寫磁碟,可以通過設定 --blkio-weight 引數來改變容器 block IO 的優先順序。--blkio-weight--cpu-shares 類似,設定的是相對權重值,預設為 500。在下面的例子中,container_A 讀寫磁碟的頻寬是 container_B 的兩倍。

docker run -it --name container_A --blkio-weight 600 rhel

docker run -it --name container_B --blkio-weight 300 rhel

相關文章