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. ArcMap中获取要素的Extent值

    新建xmax,xmin,ymax,ymin4个字段,右键,在[字段计算器]中选择Python,分别输入!shape.extent.XMax!.!shape.extent.XMin!.!shape.ex ...

  2. 20175305张天钰《java程序设计》第五周学习总结

    <java程序设计>第五周学习总结 接口与实现 知识小点: (1)用Arrays.sort方法对所有实现Comparable接口的对象进行排序 (2)接口体现了has-a关系,继承体现了i ...

  3. Ducci 队列 -基础queue,set

    https://vjudge.net/contest/185301#problem/B 用队列记录,set的不重复性来判断 //#include<bits/stdc++.h> #inclu ...

  4. django framawork

    中文文档: https://q1mi.github.io/Django-REST-framework-documentation/ 神奇的generics from snippets.models i ...

  5. python爬取房天下数据Demo

    import requests from bs4 import BeautifulSoup res = requests.get('http://sh.esf.fang.com/chushou/3_3 ...

  6. hadoop2-MapReduce详解

    本文是对Hadoop2.2.0版本的MapReduce进行详细讲解.请大家要注意版本,因为Hadoop的不同版本,源码可能是不同的. 以下是本文的大纲: 1.获取源码2.WordCount案例分析3. ...

  7. 使用gulp打包普通项目

    前言: 在使用gulp打包工具之前,我做的H5项目在浏览器中的缓存是很严重的,若改了一点css,加了一句js代码,不手动清除浏览器缓存是看不到效果的.老总也在项目演示当中遇到这些问题,一查找原因却是缓 ...

  8. leetcode-只出现一次的数字合并两个有序数组

    题目:合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素 ...

  9. NOIP-珠心算

    题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师采用一种快速考察珠心算加 ...

  10. Apache Maven入门篇(转)

    [上篇] 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 maven 来构建运行 ...