限制容器對內存的使用 Docker 容器技術

一個 docker host 上會運行若干容器,每個容器都需要 CPU、內存和 IO 資源。對於 KVM,VMware 等虛擬化技術,用戶可以控制分配多少 CPU、內存資源給每個虛擬機。對於容器,Docker 也提供了類似的機制避免某個容器因佔用太多資源而影響其他容器乃至整個 host 的性能。內存限額
與操作系統類似,容器可使用的內存包括兩部分:物理內存和 swap。 Docker 通過下面兩組參數來控制容器內存的使用量。

-m 或 --memory:設置內存的使用限額,例如 100M, 2G。

--memory-swap:設置 內存+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

–vm 1:啓動 1 個內存工作線程。

–vm-bytes 280M:每個線程分配 280M 內存。

運行結果如下:

在這裏插入圖片描述
因爲 280M 在可分配的範圍(300M)內,所以工作線程能夠正常工作,其過程是:

分配 280M 內存。

釋放 280M 內存。

再分配 280M 內存。

再釋放 280M 內存。

一直循環…

如果讓工作線程分配的內存超過 300M,結果如下:
在這裏插入圖片描述

分配的內存超過限額,stress 線程報錯,容器退出。

如果在啓動容器時只指定 -m 而不指定 --memory-swap,那麼 --memory-swap 默認爲 -m 的兩倍,比如:

docker run -it -m 200M ubuntu

容器最多使用 200M 物理內存和 200M swap。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章