Docker使用cgroup实现CPU,内存和磁盘IO等系统资源的限制。

CPU

Docker现在有2个与CPU资源相关的参数,-c可以指定CPU的占比,--cpuset可以绑定CPU。例如,指定容器在CPU 0,1运行:

# docker run -it --rm -c 1024 --cpuset=0,1 dbyin/stress --cpu 2

stress: info: [1] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd

然后再启动一个容器,同样绑定在CPU0,1,-c为512:

# docker run -it --rm -c 512 --cpuset=0,1 dbyin/stress --cpu 2

stress: info: [1] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd

可以看到container1的CPU占比为1024/(1024+512)=2/3,container2的CPU占比为512/(1024+512)=1/3。

将container1的cpu.shares改为512,

#echo “512” > /cgroup/cpu/docker/$CONTAINER_ID/cpu.shares

可以看到两个容器的CPU占比趋于平均。

内存

Docker提供参数-m, --memory=""限制容器的内存使用量。例如,

允许容器使用的内存上限为128M:

# docker run -it --rm -m 128m dbyin/stress --vm 1 --vm-bytes 128M --vm-hang 0

stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd

实际上,docker还会允许容器使用-m指定的同样大小的swap内存:

可以看到,容器可以正常启动。

可以看到,容器由于out of memory被kill掉。

IO

# docker run -it --rm dbyin/tlinux:1.2 /bin/bash

bash-4.1# time $(dd if=/dev/zero of=f1.txt bs=1024 count=500000 && sync)

500000+0 records in

500000+0 records out

512000000 bytes (512 MB) copied, 1.28334 s, 399 MB/s

real    0m12.091s

user    0m0.056s

sys     0m1.237s

可以看到,写512M数据,共用12s,平均42M/s。

将IO带宽限制为10M/s:

# echo "253:1 10485760" > /cgroup/blkio/docker/$CONTAINER_ID/ blkio.throttle.write_bps_device

bash-4.1# time $(dd if=/dev/zero of=f1.txt bs=1024 count=500000 && sync)

500000+0 records in

500000+0 records out

512000000 bytes (512 MB) copied, 1.41813 s, 361 MB/s

real    0m50.348s

user    0m0.071s

sys     0m1.473s

浅谈Docker(二)的更多相关文章

  1. Android开发-浅谈架构(二)

    写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...

  2. 浅谈Docker

    一.为什么使用Docker 软件开发最大的麻烦事之一,就是环境配置.很多人想到,能不能从根本上解决问题,软件可以带环境安装? 也就是说,安装的时候,把原始环境一模一样地复制过来. 目前有两个主流解决方 ...

  3. 浅谈Docker(一)

    注:由于别人写的太好了就转来基础介绍! 转自:http://www.infoq.com/cn/articles/docker-core-technology-preview Docker是PaaS供应 ...

  4. Qt浅谈之二十七进程间通信之QtDBus

    一.简介 DBus的出现,使得Linux进程间通信更加便捷,不仅可以和用户空间应用程序进行通信,而且还可以和内核的程序进行通信,DBus使得Linux变得更加智能,更加具有交互性.        DB ...

  5. Qt浅谈之二十App自动重启及关闭子窗口

    一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 int ma ...

  6. Qt浅谈之二十App自动重启及关闭子窗口(六种方法)

    一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 int ma ...

  7. 浅谈Struts2(二)

    一.struts2的跳转 1.action跳转JSP a.默认为forward <action name="action1" class="com.liquidxu ...

  8. 浅谈JSP(二)

    一.EL表达式 作用:从作用域(pageContext,request,session,application)中取值,并显示在页面中. 本质:用于替换输出脚本(<%= %>). 1.从作 ...

  9. 浅谈DevExpress<二>:设计一个完整界面(1)

    昨天谈了界面的换肤问题,今天拿一个简单的界面来介绍一下怎么设计一个五脏俱全的界面,总体效果如下图(种类的图片随便找的^^):

随机推荐

  1. 关于docker--详解安装,常规操作,导入导出等(2017-3-29)

    测试环境 :CentOS 7.1 64位 目的:展示docker的常规使用(安装,常规操作,导入导出等) 其他:关于原理等请参考文章后面的延伸阅读,本文不做深入探讨,且方法不唯一 0x01 关于安装d ...

  2. socket网络

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  3. c++ 第二天 命名空间、数组

    C++ 命名空间 命名空间,也就是名称空间/名字空间,注意需要的头文件是 iostream ,而不是 iostream.h ,后者是旧版本的 C++ 头文件,并不支持命名空间. 为什么要使用命名空间? ...

  4. PHP array_flip() 函数

    ------------恢复内容开始------------ 实例 反转数组中的键名和对应关联的键值: <?php$a1=array("a"=>"red&qu ...

  5. Python time ctime()方法

    描述 Python time ctime() 函数把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式.高佣联盟 www.cgewang.com 如果参数未给或者为None的时候, ...

  6. BSOJ 5553 wangyurzee的树 prufer序列 容斥

    BSOJ我也不知道在哪. 容易想到容斥. 考虑不合法的方案 想到强制某个点的度数为限制即可. 这样就变成了了总方案-一个不合法+两个不合法-3个......的模型了. 坑点 当强制两个相同的点时 方案 ...

  7. 用tf.one_hot函数写任一坐标为1的二维张量

    先给出tf.one_hot的用例:(例子转自https://www.jianshu.com/p/c5b4ec39713b) import tensorflow as tf var0 = tf.one_ ...

  8. 暑期java(面向对象设计)学习第一阶段总结

    0.前言 本次博客针对的是暑假学习java(面向对象设计)的前三次作业的小结,第一次作业:7-1 对三个整数排序 7-2 对四个整数排序 7-3 对十个整数进行排序 7-4 对多个整数进行排序 第二次 ...

  9. (转载+新增)Win7下安装配置gVim

    转载自 http://www.cnblogs.com/zhcncn/p/4151701.html.而后安装过程中加入自己遇到的问题解决方案. 本文根据vim官网的<Simple Steps to ...

  10. Unity 笔记

    摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的sett ...