Docker 容器资源限制

默认情况下,一个容器并没有资源限制,并且该容器可以使用内核调度的所有资源。Docke提供了在启动容器时设置一些参数来控制该容器使用的内存、CPU和IO。

内存

OOME:在linux中,如果Linux内核发现宿主机没有足够的内存来调用执行系统的某些重要功能的时候,此时就会调用OOME(Out Of Memory Exception)来杀死某些进程,以此来释放内存。

  • 一旦发生OOME,任何进程都有可能被杀死,包括docker daemon,因此Docker调整了Docker daemon的OOM优先级,防止其被杀死,但是容器的OOM并没有调整,此时如何内存不够用时,内核就会根据自己的调度算法,给所有的进程进行一个评分,然后杀死分数最高的进程来释放内存。

限制容器使用的内存资源

-m or --memory=n : 限制一个容器可以使用的最大内存,单位(b,k,m,g)
--memory-swap * : 限制一个容器可以使用的交换分区的大小,前提是必须先设置-m才能生效。
--memory-swappiness:设置容器的swap控制行为。值为0-100
--memory-reservation:设置内存的软限制
--kernel-memory:设置核心内存的最大值
--oom-kill-disable:是否阻止OOM 杀死容器,默认为否。

--memory-swap的总结:

--memory-swap --memory

功能描述

正数S 正数M 容器可以使用的总空间为S,ram为M,swap为(S-M),如果S=M,则没有swap资源

0 正数M 相当于没有设置swap

unset 正数M 如果Docker host启动了swap,则容器可用的 swap为2*M

-1 正数M 如果Docker host启用了swap,则容器可以使用最大swap为Docker host上的所有swap空间的资源。

在容器中,free所展现出来的swap分区是无效的

CPU

默认情况,每个容器都可以使用系统的所有CPU资源。但是我们可以通过使用CFS调度器来分配容器使用的CPU资源。

CFS调度器配置

--cpus=<value>:指定容器可以使用的CPU的核心数量
--cpu-period=<value>: 指定CPU CFS的调度周期,默认是100ms
--cpu-quota=<value>: 限制CPU CFS的配额。
--cpuset-cpus: 限制使用的CPU的集合,如有四个CPU,0-3则代表全部可以使用;1,3表示可以使用第二个和第四个。
--cpu-shares: 按比例切分CPU资源(CPU共享的权重)

测试:

使用docker提供的压测工具:docker pull lorel/docker-stress-ng

使用方法:

Example: stress-ng --cpu 8 --io 4 --vm 2 --vm-bytes 128M --fork 4 --timeout 10s

这里使用--cpu-shares按照比例来切分CPU资源,3个容器使用的CPU占比为512、1024、2048,比例为1:2:4

docker run --name stress -it --rm --cpu-shares 512 lorel/docker-stress-ng stree-ng --cpu 4
docker run --name stress1 -it --rm --cpu-shares 1024 lorel/docker-stress-ng stree-ng --cpu 4
docker run --name stress2 -it --rm --cpu-shares 2048 lorel/docker-stress-ng stree-ng --cpu 4
# docker stats

可以看到各个容器之间的cpu占比大概为1:2:4。

Docker 容器资源限制的更多相关文章

  1. docker容器资源配额控制_转

    转自:docker容器资源配额控制 ■ 文/ 天云软件 容器技术团队 docker通过cgroup来控制容器使用的资源配额,包括CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使用量控制. cg ...

  2. docker容器资源配额控制

    转自:http://blog.csdn.net/horsefoot/article/details/51731543 文/ 天云软件 容器技术团队 Docker通过cgroup来控制容器使用的资源配额 ...

  3. docker容器资源限制:限制容器对内存/CPU的访问

    目录 一.系统环境 二.前言 三.docker对于CPU和内存的限制 3.1 限制容器对内存的访问 3.2 限制容器对CPU的访问 一.系统环境 服务器版本 docker软件版本 CPU架构 Cent ...

  4. Docker 容器资源隔离 namespace(十)

    目录 一.简介 Linux Namespace的6大类型 二.Mount Namespace 三.IPC Namespace 四.Network Namespace 五.UTS Namespace 六 ...

  5. docker容器安装及使用技巧

    关于docker前言 A)首先是关于虚拟化 虚拟化我们可以简单的理解为一种资源管理方式.有如下几种虚拟化的方式: 1.完全虚拟化:对底层硬件实现完全的虚拟.例如:Vmware Workstation ...

  6. 理解Docker(4):Docker 容器使用 cgroups 限制资源使用

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  7. docker网络-如何让外部网络访问容器资源

    docker网络-如何让外部网络访问容器资源 安装httpd 服务: docker:/root# docker exec -it f63b2633d146 bash bash-4.1# yum ins ...

  8. k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

    命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...

  9. [转帖]Docker容器CPU、memory资源限制

    Docker容器CPU.memory资源限制 https://www.cnblogs.com/zhuochong/p/9728383.html 处理事项内容等 这一块内容感觉 不清楚.. 背景 在使用 ...

随机推荐

  1. maven发布到tomcat报错: Publishing failed Could not publish to the server. java.lang.IndexOutOfBoundsException

    eclipse中将maven项目发布到tomcat报错时: Publishing failed Could not publish to the server. java.lang.IndexOutO ...

  2. 1.用代码演示String类中的以下方法的用法 (2018.08.09作业)

    public class Test_001 { public static void main(String[] args) { String a = "德玛西亚!"; Strin ...

  3. 第n次搭建 SSM 框架

    什么说第 N 次搭建SSM框架呢? 刚学习java的时候,搭建 SSM 框架想做一个个人项目之类的,后来没搭起来,也就拖延了,进入公司之后,接触的第一个项目就是SSM的,模仿了一下,也能搭个简简单单的 ...

  4. java字符串转json

    针对不同jar包 一: import org.json.JSONObject; JSONObject jo = new JSONObject(new String(需要转换的字符串)); 二: imp ...

  5. PBRT笔记(13)——光线传播1:表面反射

    采样反射函数 BxDF::Sample_f()方法根据与相应的散射函数相似的分布来选择方向.在8.2节中,该方法用于寻找来自完美镜面的反射和透射光线;在这里讲介绍实现其他类型的采样技术. BxDF:: ...

  6. Pycharm安装+python安装+环境配置

    Pycharm 工具: 1.安装jdk(64位):jdk-8u65-windows-x64.exe 路径:C:\Program Files\Java(默认路径) 2.配置环境 步骤一: 系统变量→新建 ...

  7. 190327 Python登录接口

    #!Author:John # _*_ coding: utf-8 _*_ #编写登录接口 #输入用户名密码 #认证成功后显示欢迎信息 #输错三次后锁定 import sys, os, getpass ...

  8. layui select使用问题

    1.需要引用form模板 layui.use(['form'], function () { var form = layui.form; }); 2.html代码 <div class=&qu ...

  9. centos7防火墙配置

    一.在工作中远程连接经常通过堡垒机连接,不能直接开启防火墙.所以就需要写入配置文件中 编译配置文件   /etc/firewalld/zones/public.xml <?xml version ...

  10. 设置mysql InnoDB存储引擎下取消自动提交事务

    mysql 存储引擎中最长用的有两种,MyISAM 存储引擎和InnoDB存储引擎. 1.MyISAM 存储引擎 不支持事务,不支持外键,优势是访问速度快: 2.InnoDB存储引擎 支持事务,一般项 ...