一個 docker host 上會運作若幹容器,每個容器都需要 CPU、記憶體和 IO 資源。對于 KVM,VMware 等虛拟化技術,使用者可以控制配置設定多少 CPU、記憶體資源給每個虛拟機。對于容器,Docker 也提供了類似的機制避免某個容器因占用太多資源而影響其他容器乃至整個 host 的性能。
與作業系統類似,容器可使用的記憶體包括兩部分:實體記憶體和 swap。 Docker 通過下面兩組參數來控制容器記憶體的使用量。
<code>-m</code> 或 <code>--memory</code>:設定記憶體的使用限額,例如 100M, 2G。
<code>--memory-swap</code>:設定 記憶體+swap 的使用限額。
當我們執行如下指令:
docker run -m 200M --memory-swap=300M ubuntu
其含義是允許該容器最多使用 200M 的記憶體和 100M 的 swap。預設情況下,上面兩組參數為 -1,即對容器記憶體和 swap 的使用沒有限制。
下面我們将使用 progrium/stress 鏡像來學習如何為容器配置設定記憶體。該鏡像可用于對容器執行壓力測試。執行如下指令:
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
<code>--vm 1</code>:啟動 1 個記憶體工作線程。
<code>--vm-bytes 280M</code>:每個線程配置設定 280M 記憶體。
運作結果如下:
因為 280M 在可配置設定的範圍(300M)内,是以工作線程能夠正常工作,其過程是:
配置設定 280M 記憶體。
釋放 280M 記憶體。
再配置設定 280M 記憶體。
再釋放 280M 記憶體。
一直循環......
如果讓工作線程配置設定的記憶體超過 300M,結果如下:
配置設定的記憶體超過限額,stress 線程報錯,容器退出。
如果在啟動容器時隻指定 <code>-m</code> 而不指定 <code>--memory-swap</code>,那麼 <code>--memory-swap</code> 預設為 <code>-m</code> 的兩倍,比如:
docker run -it -m 200M ubuntu
容器最多使用 200M 實體記憶體和 200M swap。
記憶體限額就讨論到這裡,下一節我們将學習如何限制容器對 CPU 資源的使用。
本文轉自CloudMan6 51CTO部落格,原文連結:http://blog.51cto.com/cloudman/1934359