1 CPU 資源
參數 | 類型 | 說明 |
---|---|---|
--cpu-period |
int | 是用來指定容器對CPU的使用要在多長時間內做一次重新分配 |
--cpu-quota |
int | 是用來指定在這個周期內,最多可以有多少時間用來跑這個容器 |
--cpu-rt-period |
int | 是用來指定容器對CPU的使用要在多長時間內做一次重新分配(微秒限制CPU實時周期) |
--cpu-rt-runtime |
int | 是用來指定在這個周期內,最多可以有多少時間用來跑這個容器(微秒限制CPU實時運行時間) |
--cpu-shares或-c |
int | CPU份額(相對權重) |
--cpus |
int | CPU數量 |
--cpuset-cpus |
string | 允許執行的CPU 根據實際情況配置 |
--cpuset-mems |
string | 只應用於 NUMA 架構的 CPU 生效,關於這個選項這里不過多介紹 |
1.1 通過參數–cpu-shares分配cpu使用權重
現在運行兩個測試 container,一個權重設置為 2,一個權重設置 4,啟動命令如下:
docker run -it -d --cpu-shares 2 --name 2_cpu
docker run -it -d --cpu-shares 4 --name 4_cpu
通過壓測工具如Stress進行壓測,Stress使用實例:
產生13個cpu進程4個io進程1分鍾后停止運行
stress -c 13 -i 4 --verbose --timeout 1m
向磁盤中寫入固定大小的文件,這個文件通過調用mkstemp()產生並保存在當前目錄下,默認是文件產生后就被執行unlink(清除)操作,但是可以使用–hdd-bytes選項將產生的文件全部保存在當前目錄下,這會將你的磁盤空間逐步耗盡
# 生成小文件
# stress -d 1 --hdd-noclean --hdd-bytes 13
# 生成大文件
# stress -d 1 --hdd-noclean --hdd-bytes 3G
在宿主機中查看兩個容器CPU占用情況
# docker stats 2_cpu
# docker stats 4_cpu
1.2 通過 –cpu-period & –cpu-quota 限制容器的 CPU 使用上限
默認的 CPU CFS「Completely Fair Scheduler」period 是 100ms。我們可以通過 –cpu-period 值限制容器的 CPU 使用。一般 –cpu-period 配合 –cpu-quota 一起使用。
為啥把這兩個參數放一起呢?因為這兩個參數是相互配合的,–cpu-period和–cpu-quota的這種配置叫Ceiling Enforcement Tunable Parameters,–cpu-shares的這種配置叫Relative Shares Tunable Parameters。–cpu-period是用來指定容器對CPU的使用要在多長時間內做一次重新分配,而–cpu-quota是用來指定在這個周期內,最多可以有多少時間用來跑這個容器。跟–cpu-shares不同的是這種配置是指定一個絕對值,而且沒有彈性在里面,容器對CPU資源的使用絕對不會超過配置的值。cpu-period和cpu-quota的單位為微秒(μs)
比如說A容器配置的–cpu-period=100000 --cpu-quota=50000,那么A容器就可以最多使用50%個CPU資源,如果配置的–cpu-quota=200000,那就可以使用200%個CPU資源。
# docker run -it --cpu-period=100000 --cpu-quota=50000
1.3 cpus設置CPU數量
主要不可以超出核心數,不然會報錯
# docker run -d --cpus 1.21
1.4 cpuset-cpus允許執行的CPU
允許執行的CPU 根據實際情況配置
#docker run -d --cpuset-cpus 0-1
#docker run -d --cpuset-cpus 1,3
2 內存資源
2.1 通過 -m 參數限制內存大小
設置-m值為500Mb,表示容器程序使用內存受限。如果指定 -m 內存限制時不添加 –memory-swap 選項,則表示容器中程序可以使用 500m內存和500m swap 內存。那么容器里程序可以跑到500m*2=1g后才會被oom給殺死。
# docker run -it -d -m 500m --name limit_memory_1
# docker stats limit_memory_1
2.2 參數–memory-swappiness=0 表示禁用容器 swap 功能。
# docker run -it -d -m 500m --memory-swappiness=0
2.3 指定限制內存大小並且設置 memory-swap 值為 -1
表示容器程序使用內存受限,而 swap 空間使用不受限制(宿主 swap 支持使用多少則容器即可使用多少。如果 –memory-swap 設置小於 –memory 則設置不生效,使用默認設置)。–memory-swap -1
# docker run -it -d -m 500m --memory-swap -1
2.4 指定限制內存大小並且設置 memory-swap 值
指定限制內存大小500Mb並且設置 memory-swap 值400Mb當壓測值是900Mb時,則容器中的進程會被直接 OOM kill。
# docker run -it -d -m 500m --memory-swap 400m
2.5 參數–oom-kill-disable ,加上之后則達到限制內存之后也不會被 kill
正常情況不添加 –oom-kill-disable 容器程序內存使用超過限制后則會直接 OOM kill,加上之后則達到限制內存之后也不會被 kill。
#docker run -it -d -m 500m --oom-kill-disable