# 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 帶寬docker
--blkio-weight --> 設置一個權重值,範圍在100-1000之間,這跟cpu.shares 相似,是比重分配,而非拒絕的帶寬限制,因此只有在不一樣子系統在爭奪帶寬的子資源時候這個設定的值才生效bash
--blkio-weight-device=[] 是針對具體的設備設置權重值,這個值會覆蓋 -blkio-weight的值 ex:利用cgroup 將/dev/sda 的權重設置成最小 #echo 8:0 100 > blkio.weight_device
CPU 子系統:ide
--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 子系統ui
--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 而後殺掉某一個進程(通常是內存使用最多的進程)