Docker 限制容器資源
阿新 • • 發佈:2017-06-12
class -i 選項 iops 時間 acc 阻塞 指定 des 默認情況下,容器沒有資源的限制,它可以使用整個主機的所有資源。Dcoker提供了控制資源的方法,
多少內存,CPU,IO,都可以在docker run使用標誌符來設置。
內存
Docker可以強制執行硬內存限制,允許容器使用不超過給定數量的用戶或系統內存, 或軟限制,允許容器使用所需的內存,除非滿足某些條件,例如 內核檢測到主機上的低內存或爭用。 當單獨使用或設置多個選項時,這些選項中的一些具有不同的效果。
--memory-swap 細節
--cpu-period 和 --cpu-qota
例子:如果你有1核的CPU系統,容器run使用--cpu-period=100000
--cpu-quota=50000,容器可以消耗高達50%的1個CPU
有兩個選項可用於調整給定容器對直接塊IO設備的訪問。 您還可以按照每秒的字節數或每秒的IO操作來指定帶寬限制。
如果指定--blkio-weight和-blkio-weight-device,Docker使用--blkio-weight作為默認權重,
並使用--blkio-weight-device重寫命名設備上的默認值。
要將/ dev / sda的容器的設備權重設置為200,而不指定默認blkio-weight:
Docker可以強制執行硬內存限制,允許容器使用不超過給定數量的用戶或系統內存, 或軟限制,允許容器使用所需的內存,除非滿足某些條件,例如 內核檢測到主機上的低內存或爭用。 當單獨使用或設置多個選項時,這些選項中的一些具有不同的效果。
選項 | 說明 |
-m or --memory= |
容器能使用的最大的內存。 如果你設置了這個選項,最小允許使用的值為4M。 |
--memory-swap * |
容器允許swap的內存大小。
更多細節:--memory-swap |
--memory-swappiness |
默認情況下,不需要設置。
主機內核可以讓容器使用一定比例的匿名內存頁。你可以通過這個參數來設置這個百分比。更多細節: --memory-swappiness details.
|
--memory-reservation |
允許你指定軟限制,比--memory 參數值要小。這軟限制在Docker檢測到主機上的連接或內存較少時激活。 |
--kernel-memory |
容器可以使用的最大的內核內存。最小值是4M。 因為內核內存不能被交換出去,一個缺少內核內存的容器可能會阻礙主機的資源,這會對主機和其他容器產生負面影響。
更多細節:--kernel-memory |
--oom-kill-disable |
默認情況下:out-of-memory(oom)內存溢出的錯誤出現,內核殺死容器中的進程。使用--oom-kill-disable 可以改變這種行為。 僅僅在已經設置了-m 的容器中關閉 OOM 殺死。 如果-m 標誌沒有設置,主機可能耗盡內存,內核可能需要殺死主機系統進程來釋放內存。 |
- 如果沒有設置,而--me內核內存限制以分配給容器的總內存來表示。mory設置如300m了,則swap默認為300*2=600M
- 如果--memory,--memory-swap都設置了
- --memory-swap 代表了可以使用的總共內存,--memory 代表不使用swap的內存
- 如:--memory-swap=1g,--memory=300M,
- docker可以使用300M內存,1g-300m=700m swap.
- 如果設置為-1,則容器不限制使用swap 內存。
Option | Description |
---|---|
--cpu-shares |
Set this flag to a value greater or less than the default of 1024 to increase or reduce the container’s weight, and give it access to a greater or lesser proportion of the host machine’s CPU cycles. This is only enforced when CPU cycles are constrained. When plenty of CPU cycles are available, all containers use as much CPU as they need. In that way, this is a soft limit. --cpu-shares does not prevent containers from being scheduled in swarm mode. It prioritizes container CPU resources for the available CPU cycles. It does not guarantee or reserve any specific CPU access. |
--cpu-period |
容器上一個邏輯CPU的調度周期. --cpu-periodmor默認值是100000(100ms) |
--cpu-quota |
在由--cpu-period設置的時間段內容器可以調度的最大時間量。 |
--cpuset-cpus |
使用這個選項指定CPU使用一個或者多個CPU核,並用逗號分隔。 |
$ docker run -ti --cpu-period=10000 --cpu-quota=50000 busybox
如果你有4核的CPU系統,容器運行--cpu-period=100000 --cpu-quota=200000,容器可以使用最多2個邏輯CPU(--cpu-period的200%)
$ docker run -ti --cpu-period=100000 --cpu-quota=200000
--cpu-set-cpus 給容器實際4核的CPU
$ docker run -ti --cpuset-cpus=4 busybox
阻塞IO
有兩個選項可用於調整給定容器對直接塊IO設備的訪問。 您還可以按照每秒的字節數或每秒的IO操作來指定帶寬限制。
Option | Description |
---|---|
blkio-weight |
By default, each container can use the same proportion of block IO bandwidth (blkio). The default weight is 500. To raise or lower the proportion of blkio used by a given container, set the --blkio-weight flag to a value between 10 and 1000. This setting affects all block IO devices equally. |
blkio-weight-device |
The same as --blkio-weight , but you can set a weight per device, using the syntax --blkio-weight-device="DEVICE_NAME:WEIGHT" The DEVICE_NAME:WEIGHT is a string containing a colon-separated device name and weight. |
--device-read-bps and--device-write-bps |
Limits the read or write rate to or from a device by size, using a suffix of kb , mb , or gb . |
--device-read-iops or--device-write-iops |
Limits the read or write rate to or from a device by IO operations per second. |
$ docker run -it --blkio-weight-device "/dev/sda:200" ubuntu
此示例將ubuntu容器限制為從/ dev / sda到每秒1000次IO操作的最大讀取速率:
$ docker run -ti --device-read-iops /dev/sda:1000 ubuntu
總結
- 默認容器沒有資源的限制,Docker提供了控制方法;
- 內存,CPU,IO
- docker run + 標誌符來設置
- 主要參數
- 內存
- -m 容器能使用的最大內存
- --memory--reservation
- 比-m的值要小,在docker檢測到主機的內存較少時激活
- CPU
- --cpu-period, --cpu-quota
- 允許容器使用50%的CPU
- --cpu-period = 10 ,--cpu-quota=5
- 允許容器使用主機4核中的兩核
- --cpu-period = 10 , --cpu-quota=20
- IO
- 控制每秒的字節數或每秒的IO操作來限制帶寬
- 限制從/dev/sda 每秒1000次的IO讀取操作
- docker run -ti --device-read-iops /dev/sda:1000 ubuntu
- 內存
Docker 限制容器資源