docker分配CPU、內存資源


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM