Docker(七)資源限制

2021-10-23 22:10:16 字數 2426 閱讀 3997

什麼是cpu share:

docker 允許使用者為每個容器設定乙個數字,代表容器的 cpu share,預設情況下每個容器的 share 是 1024。這個 share 是相對的,本身並不能代表任何確定的意義。當主機上有多個容器執行時,每個容器占用的 cpu 時間比例為它的 share 在總額中的比例。docker 會根據主機上執行的容器和程序動態調整每個容器使用 cpu 的時間比例。
例子:

如果主機上有兩個一直使用 cpu 的容器(為了簡化理解,不考慮主機上其他程序),其 cpu share 都是 1024,那麼兩個容器 cpu 使用率都是 50%;如果把其中乙個容器的 share 設定為 512,那麼兩者 cpu 的使用率分別為 67% 和 33%;如果刪除 share 為 1024 的容器,剩下來容器的 cpu 使用率將會是 100%。
優點:

能保證 cpu 盡可能處於執行狀態,充分利用 cpu 資源,而且保證所有容器的相對公平;

缺點: 無法指定容器使用 cpu 的確定值。

設定 cpu share 的引數:

-c --cpu-shares,它的值是乙個整數

例: docker run --rm -it -c 512 nginx /bin/bash

限制容器能使用的 cpu 核數

-c --cpu-shares 引數只能限制容器使用 cpu 的比例,或者說優先順序,無法確定地限制容器使用 cpu 的具體核數。

從 1.13 版本之後,docker提供了–cpus 引數可以限定容器能使用的 cpu 核數,這個功能可以讓我們更精確地設定容器 cpu 使用量,是一種更容易理解也因此更常用的手段。

--cpus 後面跟著乙個浮點數,代表容器最多使用的核數,可以精確到小數點二位,也就是說容器最小可以使用 0.01 核 cpu。

例:docker run --rm -it --cpus 1.5 nginx /bin/bash

通過 --cpuset 引數實現cpu繫結

例:讓容器只執行在前兩個核上

docker run -it --cpuset-cpus=0,1 nginx /bin/bash

docker 預設沒有對容器記憶體進行限制,容器可以使用主機提供的所有記憶體。

不限制記憶體帶來的問題:

如果某個容器執行了惡意的記憶體消耗軟體,或者**有記憶體洩露,很可能會導致主機記憶體耗盡,因此導致服務不可用。可以為每個容器設定記憶體使用的上限,一旦超過這個上限,容器會被殺死,而不是耗盡主機的記憶體。
限制記憶體帶來的問題:

限制記憶體上限雖然能保護主機,但是也可能會傷害到容器裡的服務。如果為服務設定的記憶體上限太小,會導致服務還在正常工作的時候就被 oom 殺死;如果設定的過大,會因為排程器演算法浪費記憶體。
合理做法

1. 為應用做記憶體壓力測試,理解正常業務需求下使用的記憶體情況,然後才能進入生產環境使用

2. 一定要限制容器的記憶體使用上限,盡量保證主機的資源充足,一旦通過監控發現資源不足,就進行擴容或者對容器進行遷移如果可以(記憶體資源充足的情況)

3. 盡量不要使用 swap,swap 的使用會導致記憶體計算複雜,對排程器非常不友好

docker 限制容器記憶體使用量:

docker 啟動引數中,和記憶體限制有關的包括(引數的值一般是記憶體大小,也就是乙個正數,後面跟著記憶體單位 b、k、m、g,分別對應 bytes、kb、mb、和 gb):

-m --memory:容器能使用的最大記憶體大小,最小值為 4m

例:docker run -it -m 512m nginx /bin/bash

對於磁碟來說,考量的引數是容量和讀寫速度,因此對容器的磁碟限制也應該從這兩個維度出發。目前 docker 支援對磁碟的讀寫速度進行限制,但是並沒有方法能限制容器能使用的磁碟容量(一旦磁碟 mount 到容器裡,容器就能夠使用磁碟的所有容量)。

第一種是:磁碟的讀寫速率的限制

第二種是:磁碟的讀寫頻率的限制

# 限制磁碟的讀寫速率

docker 允許你直接限制磁碟的讀寫速率,對應的引數有:

--device-read-bps:磁碟每秒最多可以讀多少位元(bytes)

--device-write-bps:磁碟每秒最多可以寫多少位元(bytes)

上面兩個引數的值都是磁碟以及對應的速率,單位可以是 kb、mb 和 gb。

# 限制磁碟的讀寫頻率

下面這兩個引數可以限制磁碟的讀寫頻率(每秒能執行多少次讀寫操作):

--device-read-iops:磁碟每秒最多可以執行多少 io 讀操作

--device-write-iops:磁碟每秒最多可以執行多少 io 寫操作

Docker資源限制

1.linux cgroups 的全稱是 linux control group,是限制乙個程序組能夠使用的資源上限,包括 cpu 記憶體 磁碟 網路頻寬等。2.對程序進行優先順序設定 審計,以及將程序掛起和恢復等操作。3.linux cgroups 給使用者暴露出來的操作介面是檔案系統,它以檔案和...

Docker資源限制

m or memory 限制記憶體大小 例 memory 4m memory swap 限制交換分割槽,必須先設定記憶體大小,可設定的值 正數,0,1 正數 swap為swap memory 0 swap為物理機mem 2 1 不限制 注意 在容器內free看到的swap不具有展現出空間指示的意義 ...

docker資源限制

安裝docker後,可以在 sys fs cgroup docker 目錄下看到對docker組應用的各種限制項,包括全域性限制和位於子目錄中對於某個容器的單獨限制。使用者可以通過修改這些檔案值來控制組,從而限制docker應用資源。同時,也可以在建立或啟動容器時為每個容器指定資源的限制 c,cpu...