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

主要参考

[0]https://goldmann.pl/blog/2014/09/11/resource-management-in-docker/

作者:YY哥 
出处:http://www.cnblogs.com/hustcat/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Docker实践(5)—资源隔离的更多相关文章

  1. 5、Docker 核心原理-资源隔离和限制

    Docker 资源隔离 Docker 是利用linux的LXC技术,内核的Kernel namespace Namespace: PID - 通过PID的namespace隔离,可以嵌套 NET - ...

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

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

  3. 【容器云】传统金融企业的 Docker 实践

    基于 Docker 的容器云-Padis 目前市面上基于容器云的产品有很多,对于平安而言,则是基于 Docker 的 Padis 平台.所谓 Padis,全称是 PingAn Distribution ...

  4. 来自沪江、滴滴、蘑菇街架构师的 Docker 实践分享

    架构师小组交流会是由国内知名公司架构师参与的技术交流会,每期选择一个时下最热门的技术话题进行实践经验分享. Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是 CI/CD.Dev ...

  5. Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享

    架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...

  6. pins-模块内的代码及资源隔离方案

    随着项目的不断迭代,复杂的业务模块及项目自身的基础技术组件迅速扩张,以往基于单个模块的项目往往显得过于臃肿.代码目录结构,包名混乱,代码模块职责不清晰,耦合度高,不便维护.基础公共组件没有抽取并剥离干 ...

  7. 服务容错保护断路器Hystrix之八:Hystrix资源隔离策略

    在一个基于微服务的应用程序中,您通常需要调用多个微服务完成一个特定任务.不使用舱壁模式,这些调用默认是使用相同的线程来执行调用的,这些线程Java容器为处理所有请求预留的.在高服务器请求的情况下,一个 ...

  8. 多线程资源隔离之ThreadLocal

    上篇讲到多线程线程安全问题的解决思路,这篇将详细讲解资源隔离ThreadLocal的实践. ThreadLocal也叫线程局部变量,类似Map结构,以当前线程为key.既然是以资源隔离的思想保证线程安 ...

  9. 资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统

    资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是资源隔离 资源隔离是指为不同任务提供可独立使用的计算资源以 ...

随机推荐

  1. 20145225《Java程序设计》实验一 Java开发环境的熟悉(Linux + Eclipse)

    20145225<Java程序设计> 实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑 ...

  2. 巧用Javascript中的slice()

    slice()是Javascript中Array的一个方法,定义是这样的. arrayObject.slice(start,end)作用是从原数组中从start到end位置截取出一个新的数组,返回值是 ...

  3. 下载android 源码

    http://source.android.com/source/downloading.html 1.下载repo 官网:curl http://commondatastorage.googleap ...

  4. Intellij IDEA 根据数据库自动生成pojo和hbm

    新建一个项目,每次写hibernate部分,就觉得pojo和hbm.xml部分很蛋疼.今天搜索了半天,终于知道如何根据数据库自动生成了. Intellij IDEA14创建maven时并不能勾选各种支 ...

  5. Java 第二章 变量

    第二章 变量 变量称为:是计算机语言中能储存计算机结果或能表示值抽象概念 .变量可以通过变量名访问 int money ; //变量 money=1000; //赋值 int money=1000: ...

  6. ARP协议

    ARP协议就是一个获取对方MAC地址的协议,ARP协议它是一个网络层的协议,它的作用是通过ARP request报文来获得对方的MAC地址,ARP报文里面发送的内容大概是192.168.1.20你的M ...

  7. networkx的绘图中文显示方块问题

    修改matplotlibrc文件 font.family : sans-serif #打开该选项 font.sans-serif : Microsoft YaHei , Bitstream Vera ...

  8. Windows Phone的简单学习

    这次我主要学习了Windows Phone的开发,以及一些简单代码及用处.我了解到了windowsphone的一些功能,下面是我了解到的一些信息. Image 设置好图片的长和宽.结合了Border效 ...

  9. 项目启动异常java.lang.OutOfMemoryError: PermGen space

    java.lang.OutOfMemoryError: PermGen space 解决办法: Eclipse-->window-->Tomcat -->JVM setting  - ...

  10. postgresql 配置文件优化

    postgresql 配置文件优化 配置文件 默认的配置配置文件是保存在/etc/postgresql/VERSION/main目录下的postgresql.conf文件 如果想查看参数修改是否生效, ...