目錄
一、虛擬化技術如何限制資源?
二、為容器執行限定記憶體
三、為容器執行限定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核心探測報記憶體異常或者溢位,自動殺死占用系統資...