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. 安卓获取签名SHA1

    Debug签名:D:\Java\jdk1.8.0_151\bin>keytool -list -v -keystore debug.keystore  无需密码 Relese签名:D:\Java ...

  2. RabbitMQ中RPC的实现及其通信机制

    RabbitMQ中RPC的实现:客户端发送请求消息,服务端回复响应消息,为了接受响应response,客户端需要发送一个回调队列的地址来接受响应,每条消息在发送的时候会带上一个唯一的correlati ...

  3. MySQL系列

    目录: 一.初识数据库 二.库相关操作 三.表相关操作 四.记录相关操作 五.数据备份.pymysql模块 六.视图.触发器.事务.存储过程.函数 七.ORM框架SQLAlchemy 八.索引原理与慢 ...

  4. hadoop hdfs ha 模式

    这是我自己在公司一个搭建公司大数据框架是自己的选项,在配置yarn ha 出现了nodemanager起不来的问题于是我把yarn搭建为普通yarn 如果有人解决 高yarn的nodemanager问 ...

  5. FoxMail邮件设置

    最近部门变动,要求所有的沟通及交流都需要用企业邮箱,对于一般不喜欢看邮箱的我,经常会错过很多邮件.为了统一接收企业邮件及个人邮件,开始使用Foxmail(以前不喜欢整这些东西).下面分享一下FoxMa ...

  6. RSP小组——消消乐

    RSP小组--消消乐 团队所有博客总结 1.团队第一周作业 2.团队第二周作业 3.RSP小组--团队冲刺博客一 4.RSP小组--团队冲刺博客二 5.RSP小组--团队冲刺博客三 6.RSP小组-- ...

  7. 8.3-8.4NOIP模拟题总结

    一:成绩 Day1 score=100+100+20 Day2 score=100+30+0 这成绩还是不行啊,仍需继续加油(抱怨一句暴力分有点少#滑稽) 二:题目分析 Day1 T1祖孙询问: 已知 ...

  8. Gcd&Exgcd算法学习小记

    Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...

  9. MyBatis(五)select返回list数据

    (1)接口中编写方法 public List<Emp> getEmps(String lastName); (2)编写Mapper文件 <select id="getEmp ...

  10. JVM服务进程挂掉问题定位查询思路

    昨天有朋友咨询了个RegionServer宕机找不到日志无法定位原因的问题,干脆就系统整理下JVM服务宕机的可能原因,方便按照思路去找真正的宕机原因. 1. abort()/halt()/exit() ...