在一台物理机上启动了多个docker容器时,就需要对内存及cpu做出相关的限制,以达到容器互不影响的目的
限制内存:-m选项
注:限制内存后进入容器中(free -m)查看内存,显示的内存为物理机的内存
1
2
3
4
5
|
[root@localhost ~]
# docker run -d -p 80 -m 200m --name nginx nginx
b1086dbc4e4a4230c6289d99230c8a6a37e9e28e993678303cb97acd7faa6a09
[root@localhost ~]
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1086dbc4e4a nginx
"nginx -g 'daemon off"
3 seconds ago Up 3 seconds 443
/tcp
, 0.0.0.0:32768->80
/tcp
nginx
|
查看限制结果:docker stats命令
可以看到此容器的内存使用量以及最大可以内存
1
2
3
4
|
[root@localhost ~]
# docker stats nginx
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I
/O
BLOCK I
/O
PIDS
nginx 0.00% 8.586 MiB / 200 MiB 4.29% 648 B / 648 B 6.926 MB / 0 B 0
|
限制cpu的使用个数:--cpuset-cpus
--cpuset-cpus使用方法:
0,1,3,5:指定使用0,1,3,5的cpu
0-3:使用0,1,2,3的cpu
1
|
[root@localhost ~]
# docker run -d -p 80 --name nginx-test --cpuset-cpus=0 nginx
|
测试限制cpu是否成功:
注:限制cpu后进入容器中通过top查看的还是物理机的cpu
测试方法:agileek/cpuset-test
下载CPU测试image;agileek/cpuset-test给出了一种用于测试CPU的image,功能就是将指定的CPU资源用满
1
2
3
4
5
6
|
[root@localhost ~]
# docker pull agileek/cpuset-test
Using default tag: latest
latest: Pulling from agileek
/cpuset-test
ff9ec0a03b10: Pull complete
Digest: sha256:ba93b1446b8a2e70850001ebc1679d5be41fc5700133eebc116db70c213835bd
Status: Downloaded newer image
for
agileek
/cpuset-test
:latest
|
测试--cpuset-cpus=0
1
|
[root@localhost ~]
# docker run -it --rm --cpuset-cpus=0 agileek/cpuset-test
|
另开一窗口观察cpu的压力情况:mpstat -P ALL 3(mpstat安装包为sysstat)
可以看到cpu0的在完全占用的情况,其余的cpu并没有受到影响
由此判定--cpuset-cpus的高定生效了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@localhost ~]
# mpstat -P ALL 3
Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 02
/08/2017
_x86_64_ (4 CPU)
03:16:38 PM CPU %usr %
nice
%sys %iowait %irq %soft %steal %guest %gnice %idle
03:16:41 PM all 24.94 0.00 0.08 0.00 0.00 0.00 0.00 0.00 0.00 74.98
03:16:41 PM 0 99.67 0.00 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:16:41 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:16:41 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:16:41 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:16:41 PM CPU %usr %
nice
%sys %iowait %irq %soft %steal %guest %gnice %idle
03:16:44 PM all 24.96 0.00 0.08 0.00 0.00 0.00 0.00 0.00 0.00 74.96
03:16:44 PM 0 99.67 0.00 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:16:44 PM 1 0.00 0.00 0.33 0.00 0.00 0.00 0.00 0.00 0.00 99.67
03:16:44 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:16:44 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
|
也可以进入容器中写一个死循环,查看cpu利用情况:
1
2
3
4
5
6
|
[root@cff6c983451e tmp]
# cat test.sh
#!/bin/bash
i=0
while
true
;
do
let
i++
done
|
weilovepan520