如何使用docker對容器資源進行限制

2022-09-21 18:09:10 字數 1489 閱讀 8401

在伺服器當中,假設iis服務部署多個站點,那麼只要其中乙個站點出問題,假設是cpu100%,或者是記憶體爆滿,那麼這台伺服器上的其他站點都會跟著掛掉。同樣在使用容器時,單台主機上可能會跑幾十個容器,容器雖然都相互隔離,但是用的卻是與宿主機相同的核心,cpu、記憶體、磁碟等硬體資源。如果不對容器資源進行限制,容器之間就會相互影響。

docker提供了限制記憶體,cpu或磁碟io的方法, 可以對容器所占用的硬體資源大小以及多少程式設計客棧進行限制,我們在使用docker create建立乙個容器或者docker run執行乙個容器的時候就可以來對此容器的硬體資源做限制。

docker 提供的記憶體限制功能有以下幾點:

1、容器能使用的記憶體和交換分割槽大小。

2、容器的核心記憶體大小。

3、容器虛擬記憶體的交換行為。

4、容器記憶體的軟性限制。

5、是否殺死占用過多記憶體的容器。

6、容器被殺死的優先順序

-m,--memory 記憶體限制,格式是數字加單位,單位可以為 b,k,m,g。最小為 4m

--memory-swap 記憶體+交換分割槽大小總限制。格式同上。必須必-m設定的大

--memory-reservation 記憶體的軟性限制。格式同上

--oom-kill-disable 是否阻止 oom killer 殺死容器,預設沒設定

--oom-score-adj 程式設計客棧 容器被 oom killer 殺死的優先順序,範圍是[-1000, 1000],預設為 0

--memory-swappiness 用於設定容器的虛擬記憶體控制行為。值為 0~100 之間的整數

--kernel-memory 核心記憶體限制。格式同上,最小為 4m

使用者記憶體限制就是對容器能使用的記憶體和交換分割槽的大小作出限制。

使用時要遵循兩條直觀的規則:

-www.cppcns.comm,--memory選項的引數最小為 4m。

--memory-swap不是交換分割槽,而是記憶體加交換分割槽的總大小,所以--memory-swap必須比-m,--memory大。

docker run命令和 cpu 限制相關的所有選項如下:

--cpuset-cpus="" 程式設計客棧允許使用的 cpu 集,值可以為 0-3,0,1

-c,--cpu-shares=0 cpu 共享權值(相對權重)

cpu-period=0 限制 cpu cfs 的週期,範圍從 100ms~1s,即[1000, 1000000]

--cpu-quota=0 限制 cpu cfs 配額,必須不小於1ms,即 >= 1000

--cpuset-mems="" 允許在上執行的記憶體節點(mems),只對 numa 系統有效

其中--cpuset-cpus用於設定容器可以使用的 vcpu 核。-c,--cpu-shares用程式設計客棧於設定多個容器競爭 cpu 時,各個容器相對能分配到的 cpu 時間比例。--cpu-period和--cpu-quata用於絕對設定容器能使用 cpu 時間。

使用docker對容器資源進行限制

在伺服器當中,假設iis服務部署多個站點,那麼只要其中乙個站點出問題,假設是cpu100 或者是記憶體爆滿,那麼這台伺服器上的其他站點都會跟著掛掉。同樣在使用容器時,單台主機上可能會跑幾十個容器,容器雖然都相互隔離,但是用的卻是與宿主機相同的核心,cpu 記憶體 磁碟等硬體資源。如果不對容器資源進行...

使用docker對容器資源進行限制

在伺服器當中,假設iis服務部署多個站點,那麼只要其中乙個站點出問題,假設是cpu100 或者是記憶體爆滿,那麼這台伺服器上的其他站點都會跟著掛掉。同樣在使用容器時,單台主機上可能會跑幾十個容器,容器雖然都相互隔離,但是用的卻是與宿主機相同的核心,cpu 記憶體 磁碟等硬體資源。如果不對容器資源進行...

docker容器資源限制

docker啟動時可用針對記憶體和cpu進行資源限制 一 對記憶體進行限制 m 記憶體大小 docker run rm itd name jdk8 m 1024m primetoninc jdk 進行驗證 二 對cpu進行限制 指定容器中的程式執行在指定的cpu核心上 cpuset cpus 0 指...