預設docker容器可以使用宿主機所有的記憶體和cpu,我們可以通過 docker run 來限制記憶體和cpu的使用。
有的系統核心不支援 linux capabilities. 可以通過 docker info
命令來檢查,如果系統核心不支援,會有如下報錯
warning: no swap limit support
在linux主機上,如果kernel發現沒有足夠的記憶體了,會報出oome或者out of memory exception,並且會kill 程序來釋放記憶體,任何的程序都有可能會被kill,包括docker,這可能引起整個系統的宕機。
docker嘗試通過調整docker守護程序的oom優先順序來減輕風險,以便它比系統上的其他程序更不可能被殺死。
選項描述
-m
or--memory=
容器可使用最大記憶體,最小記憶體為4m,單位可以為 b,k,m,g
--memory-swap
*
容器可用於交換到硬碟的最大記憶體
預設情況下,容器的核心可以交換出一定比例的匿名頁,設定為從 0 到 100,0表示關閉
--memory-reservation
記憶體預留
--kernel-memory
核心記憶體限制。最小為 4m
--oom-kill-disable
是否阻止 oom killer 殺死容器,預設沒設定
只有當--memory設定之後,--memory-swap 才會生效
1、如果
--memory-swap
設定為正整數,那麼這兩個
--memory
和
--memory-swap
必須設定。
--memory-swap
表示可以使用的記憶體和交換總量,並
--memory
控制非交換記憶體使用的數量。
因此,如果
--memory="300m"
和
--memory-swap="1g"
,容器可以使用300m的記憶體和700m(
1g - 300m
)交換。
2、如果
--memory-swap
設定為
0
,則忽略該設定,並將該值視為未設定。
3、如果
--memory-swap
設定為與值相同的值
--memory
,並且
--memory
設定為正整數,
則不使用swap
。4、如果
--memory-swap
未設定並且
--memory
已
--memory
設定,則如果主機容器配置了交換記憶體
,則容器可以使用兩倍於
設定的交換。
例如,如果
--memory="300m"
和
--memory-swap
未設定,容器可以使用300m的記憶體和600m的交換。
5、如果
--memory-swap
明確設定為
-1
,則允許容器使用無限制交換,最多可達主機系統上可用的數量。
防止容器使用交換
如果--memory
和--memory-swap
設定為相同的值,則可以防止容器使用任何交換。
這是因為
--memory-swap
可以使用的組合記憶體和交換量,而--memory
只是
可以使用
的物理記憶體量。
細節核心記憶體限制以分配給容器的總記憶體表示。
請考慮以下方案:
當您開啟任何核心記憶體限制時,主機會根據每個程序跟蹤「高水位線」統計資訊,因此您可以跟蹤哪些程序(在本例中為容器)正在使用多餘的記憶體。
通過/proc//status
在主機上檢視,
可以在每個過程中看到這一點
。
docker記憶體限制
部落格 m 和 memory swap docker run it rm m 100m memory swap 1 ubuntu stress latest bin bash指定限制記憶體大小並且設定 memory swap 值為 1,表示容器程式使用記憶體受限,而 swap 空間使用不受限制 宿主...
Docker容器記憶體限制
1.使用docker自帶的 m操作進行記憶體限制時可能會由於核心限制所以出現以下提示 your kernel does not support swap limit capabilities.memory limit without swap必須通過修改grub檔案 etc default grub...
Docker 限制容器可用的記憶體
預設情況下容器使用的資源是不受限制的。也就是可以使用主機核心排程器所允許的最大資源。但是在容器的使用過程中,經常需要對容器可以使用的主機資源進行限制,本文介紹如何限制容器可以使用的主機記憶體。限制容器不能過多的使用主機的記憶體是非常重要的。對於 linux 主機來說,一旦核心檢測到沒有足夠的記憶體可...