Docker使用Linux cgroup来实现资源的限制,对于CPU的限制有两种方法:

1.cpuset

CPU Set限定容器使用某个固定的CPU核。使用默认的libcontainer引擎时,可以通过--cpuset来指定进程/docker容器在执行时使用某几个固定的CPU。比如0-3或以逗号分割如0,3,4(0是第一个CPU)。

2.cpu.shares
    CPU shares是相对权重, 设置为一个正整数,代表所分配的相对CPU资源比。在Docker中,使用默认的libcontainer引擎时,可以指定在docker run时指定-c或--cpu-shares=0。当DockerDaemon中增加新的容器时,CPU shares的权重相应减小,当删除容器时CPU shares的权重相应增加。

由于第二种方式理解上有些绕,且容器真正分到的CPU资源会随着容器数及其他容器权重而改变,个人建议并不太适合应用到生产场景中。本文主要分析第一种方式,即cpuset。

测试步骤

1、下载CPU测试image。agileek/cpuset-test给出了一种用于测试CPU的image,功能就是将指定的CPU资源用满

$ docker pull agileek/cpuset-test

2、测试容器占用单独CPU

$ docker run -it --rm --cpuset= agileek/cpuset-test

3、另开终端窗口,观察CPU占用情况

[root@zhenyunode ~]# mpstat -P ALL
Linux 3.10.-.el7.x86_64 (zhenyunode) 2015年12月20日 _x86_64_ ( CPU) 21时25分17秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
21时25分22秒 all 12.68 0.00 0.05 0.00 0.00 0.00 0.00 0.00 0.00 87.27
21时25分22秒 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.60
21时25分22秒 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.60
21时25分22秒 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.60
21时25分22秒 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
21时25分22秒 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21时25分22秒 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.80
21时25分22秒 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.60
21时25分22秒 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

4、测试容器占用多个CPU

$ docker run -it --rm --cpuset=,,, agileek/cpuset-test /cpus 

5、另开终端窗口,观察CPU占用情况

[root@zhenyunode ~]# mpstat -P ALL
Linux 3.10.-.el7.x86_64 (zhenyunode) 2015年12月20日 _x86_64_ ( CPU) 21时26分34秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
21时26分39秒 all 50.24 0.00 0.05 0.00 0.00 0.00 0.00 0.00 0.00 49.71
21时26分39秒 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21时26分39秒 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
21时26分39秒 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21时26分39秒 0.40 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.40
21时26分39秒 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21时26分39秒 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21时26分39秒 0.60 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.20
21时26分39秒 0.40 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.40

经过以上的测试步骤,可以看到,当为容器配置某个CPU时,该CPU被占满,但其余的CPU并没有受到影响。

Docker CPU 资源限制——CPU固定核功能测试的更多相关文章

  1. Docker CPU 资源限制——CPU分片功能测试

    之前的一篇随笔——Docker CPU 资源限制 中介绍了针对COU的某个或某几个核的控制,今天介绍下CPU分片功能,即CPU占比. 测试步骤 1.下载CPU测试image.agileek/cpuse ...

  2. docker cgroup技术之cpu和cpuset

    在centos7的/sys/fs/cgroup下面可以看到与cpu相关的有cpu,cpuacct和cpuset 3个subsystem.cpu用于对cpu使用率的划分:cpuset用于设置cpu的亲和 ...

  3. KVM虚拟机cpu资源限制和vcpu亲缘性绑定

    前言 KVM中添加的实例存在资源分布不均的情况,这样如果有消耗资源的实例会影响到其他实例的服务正常运行,所以给kvm做资源限制是很有必要的,下面记录一下在centos7中KVM环境下使用cgroup限 ...

  4. Docker 容器资源限制

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

  5. docker高级应用之cpu与内存资源限制(转)

    时间:2015-06-09 14:01:52      阅读:1581      评论:0      收藏:0      [点我收藏+] 标签:docker资源限制   docker cpu限制    ...

  6. docker的memory和cpu资源限制

    这里仅针对docker本身,不涉及任何编排工具compose或者k8s等. 按照惯例,官文撸起来. 重要的部分是一些选项,用来限制资源大小. Memory Most of these options ...

  7. Docker技术入门与实战 第二版-学习笔记-5-容器-命令及限制内存与cpu资源

    1.启动容器 启动容器有两种方式: 基于镜像新建一个容器并启动 将在终止状态(stopped)的容器重新启动 1)新建并启动——docker run 比如在启动ubuntu:14.04容器,并输出“H ...

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

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

  9. Linux资源控制-CPU和内存

    主要介绍Linux下, 如果对进程的CPU和内存资源的使用情况进行控制的方法. CPU资源控制 每个进程能够占用CPU多长时间, 什么时候能够占用CPU是和系统的调度密切相关的. Linux系统中有多 ...

随机推荐

  1. mvc理念和thinkphp的语法特征 thinkphp引入模板

    mvc即模型(model)-视图(view)-控制器(controller)的缩写 控制器很重要,功能性的东西要靠它实现,模型我还没接触到,只知道它对数据库负责,类似一个大控件吧... 速度... 一 ...

  2. Android之ScrollView嵌套ListView冲突

    在ScrollView中嵌套使用ListView,ListView只会显示一行多一点.两者进行嵌套,即会发生冲突.由于ListView本身都继承于ScrollView,一旦在ScrollView中嵌套 ...

  3. IIS+WebMatrix 做 PHP 遇到的问题总结

    1. URL Binding Failure Webmatrix 解决办法: 用管理员权限运行 WebMatrix 并且 改 Port. 我反正是随便输入了一个 Port 就成功了, 默认的是 610 ...

  4. SO_REUSEADDR

    问题:Linux的服务器程序,关闭后马上启动,经常报错,说是端口已经被占用,不过稍等一会儿就可以启动了. 原来我们在调用closesocket把已绑定端口的socket关闭时,这个socket并没有立 ...

  5. Unable to get setting value Parameter name: profileName

    Today when I am building my application, everything works well but when I try to run Azure Worker Ro ...

  6. 针对某个数据库error做systemstate dump

    如果想对某个具体error做systemstate dump收集,可以借助event来实现. 例如想在数据库遇到ora-00054时,收集数据systemstate dump信息: 开启: sqlpl ...

  7. git提交

    1.git pull 本地已经commit 2.git checkout master 3.git pull 4.git checkout - 5.git merge master 6.git pus ...

  8. Angular.js 学习笔记

    AngularJS 通过新的属性和表达式扩展了 HTML. AngularJS 可以构建一个单一页面应用程序. <!-- ng-app 指令定义一个 AngularJS 应用程序. ng-mod ...

  9. C# 动态链接库的创建

    首先在C#工程下面安装第三方插件包 安装方法:Tools --> Library Package Manager --> Package Manager Console Install-P ...

  10. 01分数规划zoj2676(最优比例,最小割集+二分)

    ZOJ Problem Set - 2676         Network Wars Time Limit: 5 Seconds      Memory Limit: 32768 KB      S ...