当前位置: > Linux服务器 > Docker >

Docker的CPU资源限制

时间:2016-05-10 00:22来源:linux.it.net.cn 作者:IT
 
Docker的CPU资源限制
 
 
Docker使用Linux cgroup来实现资源的限制(Linux Note – cgroup),对于CPU的限制有两种方法: 1.cpuset CPU Set限定容器使用某个固定的CPU核。使用默认的libcontainer引擎时,可以通过 --cpuset 来指定进程/docker容器在执行时使用某几个固定的CPU。比如0-
Docker使用Linux cgroup来实现资源的限制(Linux Note – cgroup),对于CPU的限制有两种方法:
 
1.cpuset
 
CPU Set限定容器使用某个固定的CPU核。使用默认的libcontainer引擎时,可以通过--cpuset来指定进程/docker容器在执行时使用某几个固定的CPU。比如0-3或以逗号分割如0,3,4(0是第一个CPU)。如果使用lxc引擎,可以指定--lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
agileek/cpuset-test给出了一种用于测试CPU的image,功能就是将指定的CPU资源用满。
 
docker pull agileek/cpuset-test
#使个第5个CPU
docker run -it --rm --cpuset=4 agileek/cpuset-test
#another terminal
mpstat -P ALL 5 10
19:00:23     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
19:00:28     all    2.09    0.00    0.00    0.01    0.00    0.00    0.00    0.00    0.00   97.90
19:00:28       0    0.00    0.00    0.00    0.00    0.00    0.20    0.00    0.00    0.00   99.80
19:00:28       1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
19:00:28       2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
19:00:28       3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
19:00:28       4  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
......
#使用0-4个CPU
docker run -it --rm --cpuset=0-4 agileek/cpuset-test /cpus 5
#another terminal
mpstat -P ALL 5 10
19:05:14     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
19:05:19     all   10.42    0.00    0.00    0.01    0.00    0.01    0.00    0.00    0.00   89.56
19:05:19       0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
19:05:19       1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
19:05:19       2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
19:05:19       3  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
19:05:19       4  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
19:05:19       5    0.20    0.00    0.00    0.00    0.00    0.40    0.00    0.00    0.00   99.40
......
2.cpu.shares
 
CPU shares是相对权重, 设置为一个正整数,代表所分配的相对CPU资源比。
在Docker中,使用默认的libcontainer引擎时,可以指定在docker run时指定-c或--cpu-shares=0;
如果使用lxc引擎,可以使用--lxc-conf="lxc.cgroup.cpu.shares = 1234"
 
apt-get install mpstata
#同时启动两个container
docker run -it --rm -c 512 --cpuset=0 agileek/cpuset-test
docker run -it --rm -c 1024 --cpuset=0 agileek/cpuset-test
#another terminal
docker ps
CONTAINER ID        IMAGE                        COMMAND                CREATED             STATUS              PORTS                    NAMES
220eeeb9cf8a        agileek/cpuset-test:latest   "/bin/sh -c burnP6"    9 seconds ago       Up 9 seconds                                 jovial_darwin       
e07d8e06f48b        agileek/cpuset-test:latest   "/bin/sh -c burnP6"    16 seconds ago      Up 15 seconds                                sharp_nobel
......
# 查看容器的进程资源信息,第四列(C)为CPU的信息,可以看到根据512:1024的cpu.share,CPU严格按照1:2的资源比例分配。
docker top 220eeeb9cf8a
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                25771               3710                0                   19:17               pts/11              00:00:00            /bin/sh -c burnP6
root                25823               25771               33                  19:17               pts/11              00:00:21            burnP6
......
docker top e07d8e06f48b
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                25644               3710                0                   19:17               pts/9               00:00:00            /bin/sh -c burnP6
root                25696               25644               67                  19:17               pts/9               00:01:36            burnP6
......
^^
参考:
Container Resource Allocation Options in docker-run
Limiting a Docker Container to a single cpu core
Use Cases for cgroups
 
 
(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容