深入理解Docker的硬件資源控制與驗證
深入理解Docker的硬件資源控制與驗證
一、docker管理資源機制——Control group
Control group 是Linux內核提供的一種限制所使用物理資源的機制,這些資源主要是CPU、內存、blkio等。
二、對CPU的控制
對CPU的控制有下面幾種方式:
限制CPU的使用率;
多任務按比例分配CPU;
限制CPU內核(核心數)使用;
2.1基于使用率限制CPU
我們可以在文件中查看默認的限制設置,我們先運行一個容器(兩種方式,我們使用run的命令來快速運行一個容器):
#檢查本地是否有鏡像或容器存在
#運行一個容器
我們進入docker目錄下的容器編號目錄中,查看cpu.cfs_quota_us文件,其中的內容默認為-1(我們可以對此更改)
果然,默認的配額值為-1,這就表示默認情況下是不對CPU資源進行控制的,顯然這樣在使用容器的過程中非常容易出現問題,例如一臺真實服務器運行著各種各樣的數量非常多的容器,而其中一臺容器占據了接近90%的CPU使用率,那么剩下來的如此多的容器只能在剩余的10%中獲取使用,這很容易引發業務故障,因此我們需要對CPU包括隨后的內存及文件IO流進行優化處理的配置。
首先,本小節是對CPU的使用率進行的控制,那么下面就來看看怎么配置的吧。
我們可以直接進入這個文件進行設置,那么怎么設置呢?
這就需要說明一下了,CPU的百分比是以1000位單位的,因此總額為100000,即10萬,那么我們寫入20000,則使用率為20%。除了直接改(echo也行)也可以在命令行中進行設置:
那么我們怎么驗證或者說測試這個使用率占比最高是在20%呢?
我們可以進入這個容器中執行操作,使得CPU滿載,另外開一個terminal使用top命令查看CPU使用情況即可。
為了演示整個效果我在另外一個終端使用top命令查看,可以發現整個CPU使用率在20%左右,會有所上浮但是不會過分離譜,計算完成后將會釋放資源的。截取兩張圖作為驗證結果:
2.2基于CPU內核使用限制
在docker中可以使用--cpuset-cpus選項來使某些程序獨享CPU的內核,以便提高其處理速度。如果我們的CPU核心數為4那么對應的編號為0,1,2,3,可以通過top命令來查看,按下數字1后就可以查看CPU編號以及對應信息了。
具體的控制設置如下:
[root@docker ~]# docker run -itd --name test2 --cpuset-cpus 1,3 centos:7 /bin/bash
116606ef1e11b0afa09da67b2782c1cc0d042eb026cbfe113d7dac11ae818dcc#即基于cpuset-cpus進行設置
使用第二種方式的測試方法,基于top命令查看驗證,結果如下圖所示:
三、對內存的控制
內存使用相對于CPU而言比較簡單了,通過-m參數進行設置。
實例演示:
在另一個終端上進行查看:docker stats
結果如下圖: