共計 960 個字符,預(yù)計需要花費(fèi) 3 分鐘才能閱讀完成。
如何限制 Docker 容器對內(nèi)存的使用,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
一個 docker host 上會運(yùn)行若干容器,每個容器都需要 CPU、內(nèi)存和 IO 資源。對于 KVM,VMware 等虛擬化技術(shù),用戶可以控制分配多少 CPU、內(nèi)存資源給每個虛擬機(jī)。對于容器,Docker 也提供了類似的機(jī)制避免某個容器因占用太多資源而影響其他容器乃至整個 host 的性能。
內(nèi)存限額
與操作系統(tǒng)類似,容器可使用的內(nèi)存包括兩部分:物理內(nèi)存和 swap。Docker 通過下面兩組參數(shù)來控制容器內(nèi)存的使用量。
-m 或 –memory:設(shè)置內(nèi)存的使用限額,例如 100M, 2G。
–memory-swap:設(shè)置 內(nèi)存 +swap 的使用限額。
當(dāng)我們執(zhí)行如下命令:
docker run -m 200M –memory-swap=300M ubuntu
其含義是允許該容器最多使用 200M 的內(nèi)存和 100M 的 swap。默認(rèn)情況下,上面兩組參數(shù)為 -1,即對容器內(nèi)存和 swap 的使用沒有限制。
下面我們將使用 progrium/stress 鏡像來學(xué)習(xí)如何為容器分配內(nèi)存。該鏡像可用于對容器執(zhí)行壓力測試。執(zhí)行如下命令:
docker run -it -m 200M –memory-swap=300M progrium/stress –vm 1 –vm-bytes 280M
–vm 1:啟動 1 個內(nèi)存工作線程。
–vm-bytes 280M:每個線程分配 280M 內(nèi)存。
因為 280M 在可分配的范圍(300M)內(nèi),所以工作線程能夠正常工作,其過程是
分配 280M 內(nèi)存。
釋放 280M 內(nèi)存。
再分配 280M 內(nèi)存。
再釋放 280M 內(nèi)存。
一直循環(huán) ……
如果讓工作線程分配的內(nèi)存超過 300M。
分配的內(nèi)存超過限額,stress 線程報錯,容器退出。
如果在啟動容器時只指定 -m 而不指定 –memory-swap,那么 –memory-swap 默認(rèn)為 -m 的兩倍,比如:
docker run -it -m 200M ubuntu
容器最多使用 200M 物理內(nèi)存和 200M swap。
關(guān)于如何限制 Docker 容器對內(nèi)存的使用問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注丸趣 TV 行業(yè)資訊頻道了解更多相關(guān)知識。