限制容器對CPU的使用 - 每天5分鍾玩轉 Docker 容器技術(28)


上節學習了如何限制容器對內存的使用,本節我們來看CPU。


默認設置下,所有容器可以平等地使用 host CPU 資源並且沒有限制。

Docker 可以通過 -c 或 --cpu-shares 設置容器使用 CPU 的權重。如果不指定,默認值為 1024。

與內存限額不同,通過 -c 設置的 cpu share 並不是 CPU 資源的絕對數量,而是一個相對的權重值。某個容器最終能分配到的 CPU 資源取決於它的 cpu share 占所有容器 cpu share 總和的比例。

換句話說:通過 cpu share 可以設置容器使用 CPU 的優先級

比如在 host 中啟動了兩個容器:

docker run --name "container_A" -c 1024 ubuntu

docker run --name "container_B" -c 512 ubuntu


container_A 的 cpu share 1024,是 container_B 的兩倍。當兩個容器都需要 CPU 資源時,container_A 可以得到的 CPU 是 container_B 的兩倍。

需要特別注意的是,這種按權重分配 CPU 只會發生在 CPU 資源緊張的情況下。如果 container_A 處於空閑狀態,這時,為了充分利用 CPU 資源,container_B 也可以分配到全部可用的 CPU。

下面我們繼續用 progrium/stress 做實驗。

  1. 啟動 container_A,cpu share 為 1024: 

    --cpu 用來設置工作線程的數量。因為當前 host 只有 1 顆 CPU,所以一個工作線程就能將 CPU 壓滿。如果 host 有多顆 CPU,則需要相應增加 --cpu 的數量。

  2. 啟動 container_B,cpu share 為 512: 

  3. 在 host 中執行 top,查看容器對 CPU 的使用情況: 

    container_A 消耗的 CPU 是 container_B 的兩倍。

  4. 現在暫停 container_A: 

  5. top 顯示 container_B 在 container_A 空閑的情況下能夠用滿整顆 CPU: 

CPU限額就討論到這里,下一節我們將學習如何限制容器對 Block IO 帶寬資源的使用。

二維碼+指紋.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM