Docker 之 cgroup篇

# docker --version 
Docker version 1.10.3, build f476348/1.10.3

以1.10.3這個版本爲例,其中跟cgroup 相關的option有如下幾個:
--blkio-weight                  Block IO (relative weight), between 10 and 1000
--blkio-weight-device=[]        Block IO weight (relative device weight)

--cpu-shares                    CPU shares (relative weight)
--cpu-period                    Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota                     Limit CPU CFS (Completely Fair Scheduler) quota
--cpuset-cpus                   CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems                   MEMs in which to allow execution (0-3, 0,1)
  
--device-read-bps=[]            Limit read rate (bytes per second) from a device
--device-read-iops=[]           Limit read rate (IO per second) from a device
--device-write-bps=[]           Limit write rate (bytes per second) to a device
--device-write-iops=[]          Limit write rate (IO per second) to a device

-m, --memory                    Memory limit
--memory-reservation            Memory soft limit
--memory-swap                   Swap limit equal to memory plus swap: '-1' to enable unlimited swap

--oom-kill-disable              Disable OOM Killer


cgroup 子系統 blkio是用來限制block I/O 帶寬

--blkio-weight --> 設置一個權重值,範圍在100-1000之間,這跟cpu.shares 類似,是比重分配,而非拒絕的帶寬限制,所以只有在不同子系統在爭奪帶寬的子資源時候這個設定的值才生效


--blkio-weight-device=[] 
是針對具體的設備設置權重值,這個值會覆蓋 -blkio-weight的值
ex:利用cgroup 將/dev/sda 的權重設置成最小
#echo 8:0 100 > blkio.weight_device


CPU 子系統:

--cpu-shares 
是分配cpu的比例權重,ex:512/1024 後者可以拿到2/3的cpu運行時間,當然也是當存在爭奪的時候此分配的值纔會生效,一般情況下是不工作的。

--cpu-period / --cpu-quota
這兩個option一般是組合使用,可以利用 --cpu-period 設置成1秒,然後將--cpu-quota 設置爲0.5秒,那麼在cgroup中的進程在1秒內最多運行0.5秒,然後會被強制睡眠,直到進入下一個1秒時間片段

--cpuset-cpus
允許使用CPU的列表, 例如:0-3,10 (主要看server上的CPU數目和core的數目,lscpu可以查看)

--cpuset-mems
允許進程使用的內存節點列表,例如 :0,1
主要手動利用cgroup 控制進程可以訪問的內存節點,防止過多的跨內存使用CPU而減慢整個機器的運行速度

Device 子系統

--device-read-bps=[]  
設置每秒讀磁盤的帶寬上限,需要指定設備
          
--device-read-iops=[]
設置每秒讀磁盤的IOPS上限,需要指定設備   
        
--device-write-bps=[]  
設置每秒寫磁盤的帶寬上限,需要指定設備  
     
--device-write-iops=[]
設置每秒寫磁盤的IOPS上限,需要指定設備


-m, --memory
限制cgroup控制的進程使用memroy的上限,hard limit (絕對不會超過此值)

--memory-reservation 
soft limit memory 使用,可以超過這個值

--memory-swap                   
限制cgroup控制的進程使用的swap memory的大小,其中此選項所對應的值是 memory + swarp 的和
--oom-kill-disable
打開此開關,那麼當進程使用的memory超多的hard limit所限制的內存數目,那麼會觸發系統的OOM
然後殺掉某一個進程(一般是內存使用最多的進程)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章