Docker——Cgroup資源限制

Docker Cgroup資源配置方法

Cgroup是Linux內核提供的一種可以限制、記錄、隔離進程組所使用的物理資源的機制

Docker通過Cgroup來控制容器使用的資源配額,包括 cpu、內存、磁盤三大方面,基本覆蓋了常見的資源配額和使用量控制

Cgroup子系統

- blkio:設置限制每個塊設備的輸入輸出控制
 - cpu:使用調度程序爲cgroup任務提供cpu的訪問
 - cpuacct:產生cgroup任務放的cpu資源報告
 - cpuset:如果是多核心的cpu,這個子系統會爲cgroup任務分配單獨的cpu和內存
 - devices:允許或拒絕cgroup任務對設備的訪問
 - freezer:暫停和恢復cgroup任務
 - memory:設置每個cgroup的內存限制以及產生內存資源報告
 - net_cls:標記每個網絡包以供cgroup方便使用
 - ns:命名空間子系統
 - perf_event:增加了對每個group的監控跟蹤的能力,可以監控屬於某個特定的group的所有線程以及運行在特定cpu上的線程

使用Stress工具來測試cpu和內存

使用Dockerfile創建一個stress工具鏡像

[root@localhost ~]# mkdir /opt/stress
[root@localhost ~]# cd /opt/stress/
[root@localhost stress]# vim Dockerfile
FROM centos:7
MAINTAINER lzp "lzp@kgc"
RUN yum install -y wget
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install -y stress
[root@localhost stress]# docker build -t centos:stress .

創建容器

[root@localhost stress]# docker run -itd --name cpu512 --cpu-shares 512 centos:stress stress -c 10
[root@localhost stress]# docker exec -it b6f7b6a43716 bash
[root@b6f7b6a43716 /]# top

[root@localhost stress]# docker run -itd --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10 
[root@localhost stress]# docker exec -it d5aabd524580 bash
[root@d5aabd524580 /]# top

啓動兩個容器及運行查看cpu使用百分比

使用top命令查看比例,對兩個容器進行比較
在這裏插入圖片描述
在這裏插入圖片描述
在默認情況下,每個Docker容器的cpu份額都是1024,單獨一個容器的份額是沒有意義的。只有在同時運行多個容器時,容器的cpu加權的效果才能體現出來。

CPU週期限制

兩個參數控制容器CPU時鐘週期

  • --cpu-period:是用來指定容器對cpu的使用要在多長時間內做一次重新分配
  • --cpu-quota:是用來指定在這個週期內,最多可以有多長時間用來跑這個容器
    與--cpu-shares不同的是。這種配置是指定一個絕對值,容器對cpu資源的使用絕對不會超過配置的值

cpu-period和cpu-quota的單位爲微秒(us),cpu-period的最小值爲1000微秒,最大值爲1秒,默認值爲0.1秒。cpu-quota的默認值爲-1 ,表示不做控制。cpu-period和cpu-quota 參數一般聯合使用

在多核情況下,允許容器進程需要完全佔用兩個CPU,則可以將cpu-period設置爲100000(即0.1秒),cpu-quota設置爲200000(0.2秒)

[root@localhost stress]# docker run -itd --name cpu01 --cpu-period=100000 --cpu-quota=200000 centos:stress
[root@localhost stress]# docker ps -a
[root@localhost stress]# docker exec -it dbf79db9c053 bash
[root@dbf79db9c053 /]# cat /sys/fs/cgroup/cpu/cpu.cfs_period_us 
100000
[root@dbf79db9c053 /]# cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us 
200000

在這裏插入圖片描述

CPU Core控制

對多核cpu的服務器,Docker還可以控制容器運行使用那些cpu內核,即使用--cpuset-cpus參數
這對具有多cpu的服務器尤其有用,可以對需要高性能計算的容器進行性能最優的配置

[root@localhost stress]# docker run -itd --name cpu02 --cpuset-cpus=0-2 centos:stress 
//以上命令需要宿主機爲雙核,表示創建的容器只能使用0、1、2三個內核,最終生成的cgroup的cpu內核配置如下
[root@localhost stress]# docker ps -a
[root@localhost stress]# docker exec -it 4416c771538e bash
[root@4416c771538e /]# cat /sys/fs/cgroup/cpuset/cpuset.cpus
0-2

在這裏插入圖片描述

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