容器的資源限制實戰

2021-10-10 10:39:03 字數 2736 閱讀 3076

目錄

一、虛擬化技術如何限制資源?

二、為容器執行限定記憶體

三、為容器執行限定cpu

vmvare 安裝的虛擬機器可以通過介面設定cpu、記憶體... 的資源限制,如下圖。docer 容器也同樣可以通過指定引數來達到這個目的。其原理為何?請參見

我的環境是一台阿里雲伺服器。

通過docker run --help

-m, --memory bytes                   memory limit

--memory-reservation bytes memory soft limit

--memory-swap bytes swap limit equal to memory plus swap: '-1' to enable unlimited swap

通過docker run指定memory 限制為20mb,算上swap總共可以申請40mb。--vm-bytes記得要改一下(以我的環境來說修改為10mb),否則預設是256mb,記憶體如果太小一直會分配失敗.

-c, --cpu-shares int                 cpu shares (relative weight)
開啟三個會話:

會話一: 指定cpu權重為10 

~]# docker run --cpu-shares=10 --name=test1 ninesun0318/ubuntu-stress --cpu 1 --verbose

stress: info: [1] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

stress: dbug: [1] using backoff sleep of 3000us

stress: dbug: [1] --> hogcpu worker 1 [5] forked

會話二:top檢視該container 的cpu資訊

會話一: 指定cpu權重為5

~]# docker run --cpu-shares=5 --name=test2 ninesun0318/ubuntu-stress --cpu 1 --verbose
此時再檢視top資訊,剛開始兩個stress 程序所佔cpu分別是33% 70%,剛好是按照權重分配 2:1的關係,過一會兩個程序所佔cpu都是100%,

這是為什麼呢?看完這張你應該就知道了。

代表 檢視每顆邏輯cpu的使用狀況,每2s輸出一次,一共輸出100次。

也就是說有兩個cpu所以可以併發執行兩個stress,docker 執行容器時設定的cpu權重是針對單核cpu,或者說的那個併發任務大於cpu邏輯核心數時,該引數才會生效。

不信你再docker run 乙個 strss,cpu權重設定為15%。

兩顆cpu都跑慢了,但是cpu權重卻生效了,這時也就發生了cpu時鐘切換。

容器的資源限制

我們在建立虛擬機器時,會根據物理機的硬碟 cpu等資源對虛擬機器的資源進行限制,同樣的容器也可以對其進行資源限制,我們先看看docke runr中的命令 root localhost vagrant docker run help 其中,有關於對memory做限制的 m,memory bytes m...

docker容器資源限制

docker啟動時可用針對記憶體和cpu進行資源限制 一 對記憶體進行限制 m 記憶體大小 docker run rm itd name jdk8 m 1024m primetoninc jdk 進行驗證 二 對cpu進行限制 指定容器中的程式執行在指定的cpu核心上 cpuset cpus 0 指...

docker容器的記憶體資源限制

docker資源限制和docker資源限制的型別 記憶體資源限制的原理和記憶體資源限制的選項 配置記憶體資源限制 預設情況docker沒有對容器進行資源限制 容器可以無限制從docker宿主機獲取計算機硬體資源 當docker宿主機硬體佔滿,linux核心探測報記憶體異常或者溢位,自動殺死占用系統資...