使用docker对容器资源进行限制

问题窥探

在服务器当中,假设iis服务部署多个站点,那么只要其中一个站点出问题,假设是cpu100%,或者是内存爆满,那么这台服务器上的其余站点都会跟着挂掉。一样在使用容器时,单台主机上可能会跑几十个容器,容器虽然都相互隔离,可是用的倒是与宿主机相同的内核,CPU、内存、磁盘等硬件资源。若是不对容器资源进行限制,容器之间就会相互影响。docker

解决办法

Docker提供了限制内存,CPU或磁盘IO的方法, 能够对容器所占用的硬件资源大小以及多少进行限制,咱们在使用docker create建立一个容器或者docker run运行一个容器的时候就能够来对此容器的硬件资源作限制。服务器

内存限制

Docker 提供的内存限制功能有如下几点:app

一、容器能使用的内存和交换分区大小。编辑器

二、容器的核心内存大小。spa

三、容器虚拟内存的交换行为。code

四、容器内存的软性限制。blog

五、是否杀死占用过多内存的容器。内存

六、容器被杀死的优先级资源

-m,--memory     内存限制,格式是数字加单位,单位能够为 b,k,m,g。最小为 4M
--memory-swap   内存+交换分区大小总限制。格式同上。必须必-m设置的大
--memory-reservation    内存的软性限制。格式同上
--oom-kill-disable      是否阻止 OOM killer 杀死容器,默认没设置
--oom-score-adj         容器被 OOM killer 杀死的优先级,范围是[-1000, 1000],默认为 0
--memory-swappiness     用于设置容器的虚拟内存控制行为。值为 0~100 之间的整数
--kernel-memory         核心内存限制。格式同上,最小为 4M

用户内存限制就是对容器能使用的内存和交换分区的大小做出限制。
使用时要遵循两条直观的规则:部署

-m,--memory选项的参数最小为 4M。
--memory-swap不是交换分区,而是内存加交换分区的总大小,因此--memory-swap必须比-m,--memory大。

cpu限制

docker run命令和 CPU 限制相关的全部选项以下:

--cpuset-cpus=""          容许使用的 CPU 集,值能够为 0-3,0,1
-c,--cpu-shares=0   CPU     共享权值(相对权重)
cpu-period=0              限制 CPU CFS 的周期,范围从 100ms~1s,即[1000, 1000000]
--cpu-quota=0             限制 CPU CFS 配额,必须不小于1ms,即 >= 1000
--cpuset-mems=""          容许在上执行的内存节点(MEMs),只对 NUMA 系统有效

其中--cpuset-cpus用于设置容器可使用的 vCPU 核。-c,--cpu-shares用于设置多个容器竞争 CPU 时,各个容器相对能分配到的 CPU 时间比例。--cpu-period和--cpu-quata用于绝对设置容器能使用 CPU 时间。

相关文章
相关标签/搜索