Docker资源限定

Memory
--OOME
一旦发生OOME,任何进程都有可能被杀死,包括docker daemon
为此docker特地调整了docker daemon的OOM优先级,以免它被内核"正法" 
但容器的优先级并未被调整!

限制容器可以使用的内存资源:
默认是没有限制!

-m/--memory --限制容器可用的内存空间
..............................................
--memory-swap k|b|m|g 
限制交换分区使用大小,要先设置-m选项

用法规则:
-m的值为正数M时,--memory-swap 也是正数S时
容器可用总空间大小为S,其中ram为M,swap为(S-M) 
若S=M则无可用swap资源
都设置有值时--memory-swap的值要大于-m

当-m等于正数M时--memory-swap为0时,相当于未设置swap

当-m等于正数时--memory-swap为unset 若主机启用了swap
则容器的可用swap为2*M
unset=未设置

当-m为正数M时,--memory-swap 为-1 若主机启用了swap
则容器可使用最大至主机上所有swap空间资源

注意:
在容器内使用free命令可以看到的swap空间并不具有其
所展现出的空间指标意义!

................................................
--memory-swappiness
[0--100]
0=能不用就不用交换分区
值越高就表示启用的优先级越高

--memory-reservation --设置预留内存空间
--kernel-memory --
--oom-kill-disable 
true/false
设置如果不想因为分配内存空间用尽而使得容器被杀死
就设置这一项的值为true

.....................................................
CPU设置:
容器可以使用宿主机上所有cpu资源!
CFS---算法
cpu数量小于进程数

--cpu-shares [1024]
cpu资源共享 ---设置一个比例,容器都需要时,按比例分配
如果一个需要其它不需要,就可以都分配给需要的那个容器

--cpus=<value> --限制一个容器最多能使用几核cpu
支持使用小数如0.5

--cpu-period=<value>
--cpu-quota=<value>

--cpuset-cpus --限制使用cpu范围
定义一个容器只能运行在那个cpu核心上工作!
cpu核心数从0开始
--cpuset-cpus 0-2

stress --镜像

https://hub.docker.com

--fork [n] --启动几个进程
--vm [n] --启动多少个进程对内存做压测
--cpu [n] --使用几个cpu
--io [n] --对io进行分配
--vm-bytes [n] --指定每个进程用多少内存

具体镜像应用:
docker run -it --name b1 --rm -m 256m 1ae56ccafe55 stress --vm 2

docker top [容器名称] --查看容器占用资源!

docker stats --显示容器资源占用!

对cpu做压测:
docker run -it --name b1 --rm -cpus 2 1ae56ccafe55 stress --cpu 4

定义使用的核心数为2 
也就是说做压测无论启用多少个进程最多只能占用百分之二百资源

不做限制会直接使用所有cpu资源!

当我启用两个容器并对比例做出要求时:
docker run -it --name b1 --rm --cpu-shares 1024 1ae56ccafe55 stress --cpu 4
docker run -it --name b1 --rm --cpu-shares 512 1ae56ccafe55 stress --cpu 4

会按照比例分配cpu资源!

..........................................................
要想容器不会因占用资源过高而被kill:
方法1:
--oom-kill-disable=true --直接禁用
方法2:
--oom-score-adj [-1000-1000] 把值调整的越小越不容易被kill

猜你喜欢

转载自blog.51cto.com/13878078/2315613