1.docker 容器控制CPU

  docker通过cgroup来控制容器使用的资源限制,可以对docker限制的资源包括cpu、内存、磁盘

1.1 指定docker容器可以使用的cpu份额

# 查看配置份额命令:docker run --help | grep cpu-shares

-c, --cpu-shares int                 CPU shares (relative weight)

CPU shares在创建容器时指定容器所使用的cpu份额值。cpu-shares的值不能保证可以获得1个vcpu或者多少GHz的cpu资源,仅仅只是一个弹性的加权值
默认每个docker容器的cpu份额值都是1024,在同一个cpu核心上,同时运行多个容器,容器的cpu加权效果才能体现出来
例如:2个容器A、B的cpu份额是1000和500,结果:
    1.A和B正常运行,占用同一个CPU,在cpu进行时间片分配的时候,容器A比容器B多一倍机会获得CPU的时间片;
    2.如果A的进程一直是空闲的,那么容器B时可以获取比容器A更多的CPU时间片
例:给容器示例分配512权重的cpu使用份额
参数:--cpu-shares 512
命令:docker run -it --cpu-shares 512 centos /bin/bash
查看是否设置成功:进入容器内:cat /sys/fs/cgroup/cpu/cpu.shares

1.2 cpu core核心控制

参数:--cpuset 可以绑定CPU
对多核CPU服务器,docker可以控制容器运行限定使用哪些cpu内核和内存节点,--cpuset-cpus 和 --cpuset-mems 参数设置,对具有NUMA拓扑(有多CPU、多内存)的服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置 补充扩展:
服务器架构一般分:SMP、NUMA、MPP体系结构
1.对称多处理器结构()SMP),例:x86服务器,双路服务器,主板上有2个物理cpu
2.非一致存储访问结构(NUMA),例:IBM小型机Pseries 690
3.海量并行处理结构(MPP),例:大型机Z14

测试方法:将cpu都绑定到同一个核心上,运行stress,然后使用taskset绑定CPU
Stress:linux系统压力测试软件,可以直接yum install stress -y 安装,epel源里有

例:2个cpu进程,2个io进程,20s后停止运行
stress -c 2 -i 2 --verbose --timeout 20s
实验:
#容器名stress10运行在0和1的cpu上
docker run -itd --name stress10 --cpuset-cpus 0,1 --cpu-shares 512 centos /bin/bash
docker run -itd --name stress20 --cpuset-cpus 0,1 --cpu-shares 1024 centos /bin/bash
容器内安装epel源:yum install epel-release -y和yum install stress -y,然后运行stress命令进行测试,将cpu占满查看top情况

2. docker容器控制内存

参数:-m    -m, --memory bytes                   Memory limit
例1:允许容器使用的内存上限为128M
>docker run -it -m 128m centos
查看:cat /sys/fs/cgroup/memory/memory.limit_in_bytes # 可以使用tress进行测试
例2:创建一个docker,只使用2个cpu核心,使用128M内存
docker run -it --cpuset-cpus 0,1 -m 128m centos

3.docker容器控制IO

[root@node2 ~]# docker run --help| grep write-b
--device-write-bps list Limit write rate (bytes per second) to a device (default [])
# 限制此设备上读速度,单位可以是kb、mb或gb
情景:防止某个docker容器吃光磁盘的I/O资源
例1:限制容器示例对硬盘的最高写入速度为2MB/s
--device参数:将主机设备添加到容器
mkdir -p /var/www/html/
docker run -it -v /var/www/html/:/var/www/html/ --device /dev/sda:/dev/sda --device-write-bps /dev/sda:2mb centos /bin/bash # 测试命令
time dd if=/dev/sda of=/var/www/html/test.out bs=2M count=50 oflag=direct,nonblock 注:dd参数:
direct:读写数据采用IO方式,不走缓存,直接从内存写硬盘
nonblock:读写数据采用非阻塞IO方式,优先写dd命令的数据

4.docker容器运行结束后自动释放资源

      --rm                             Automatically remove the container when it exits
用途:当容器命令运行结束后,自动删除容器,自动释放资源

docker容器资源配额的更多相关文章

  1. docker容器资源配额控制_转

    转自:docker容器资源配额控制 ■ 文/ 天云软件 容器技术团队 docker通过cgroup来控制容器使用的资源配额,包括CPU.内存.磁盘三大方面,基本覆盖了常见的资源配额和使用量控制. cg ...

  2. docker容器资源配额控制

    转自:http://blog.csdn.net/horsefoot/article/details/51731543 文/ 天云软件 容器技术团队 Docker通过cgroup来控制容器使用的资源配额 ...

  3. Docker 容器资源限制

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

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

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

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

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

  6. docker容器安装及使用技巧

    关于docker前言 A)首先是关于虚拟化 虚拟化我们可以简单的理解为一种资源管理方式.有如下几种虚拟化的方式: 1.完全虚拟化:对底层硬件实现完全的虚拟.例如:Vmware Workstation ...

  7. tasksetCPU亲和力&docke容器资源限制

    [taskset详解] taskset设置cpu亲和力,taskset能够将一个或者多个进程绑定到一个或者多个处理器上运行 参数: 选项: -a, --all-tasks 在给定 pid 的所有任务( ...

  8. Docker容器(四)——常用命令

    (1).基本使用方法 查看所有镜像.docker images [root@youxi1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ...

  9. [转帖]Docker容器CPU、memory资源限制

    Docker容器CPU.memory资源限制 https://www.cnblogs.com/zhuochong/p/9728383.html 处理事项内容等 这一块内容感觉 不清楚.. 背景 在使用 ...

  10. Docker(二十)-Docker容器CPU、memory资源限制

    背景 在使用 docker 运行容器时,默认的情况下,docker没有对容器进行硬件资源的限制,当一台主机上运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU.内存和磁盘资源.如果不 ...

随机推荐

  1. 记录--Event Loop事件循环、微任务、宏任务

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 JS是一门单线程语言,单线程就意味着,所有的任务需要排队,前一个任务结束,才会执行下一个任务.这样所导致的问题是:如果JS执行的时间 ...

  2. dotnet转换webservice返回的dataset

    string paras = "p1=test1&p2=test2";//参数 byte[] bytes = Encoding.UTF8.GetBytes(paras); ...

  3. spring boot @Scheduled 单线程的问题

    package com.lxw.lxwDemo; import org.springframework.scheduling.annotation.EnableScheduling; import o ...

  4. verilog的文件流和项目流

    verilog的文件流和项目流 1.写在前面 在学习FPGA时,一般都是从项目流入手的.从一个集成的开发环境创建一个工程.通过一个个组件的编写和设置来实现某个项目.这样的操作固然简单,对于设计者来说只 ...

  5. KingbaseES V8R3数据库运维案例之---不完整的启动包(incomplete startup packet)复现

    案例说明: 在KingbaseES V8R3数据库的sys_log日志中,出现以下故障信息"不完整的启动包(incomplete startup packet)"日志信息.本案例复 ...

  6. Tarjan 算法——图论学习笔记

    Part.1 引入 在图论问题中,我们经常去研究一些连通性问题,比如: 有向图的联通性:传递闭包--Floyd 算法: 有向图连通性的对称性:强联通分量(SCC)--Tarjan 算法缩点: 无向图的 ...

  7. Scala 模式匹配拓展

    1 package chapter08 2 3 object Test03_MatchTupleExtend { 4 def main(args: Array[String]): Unit = { 5 ...

  8. sql语句TRUNCATE 清空表数据

    清空表数据 TRUNCATE TABLE zzsfp_hwmx;

  9. 使用OHOS SDK构建benchmark

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/google/bench ...

  10. RabbitMQ 05 直连模式-Spring Boot操作

    Spring Boot集成RabbitMQ是现在主流的操作RabbitMQ的方式. 官方文档:https://docs.spring.io/spring-amqp/docs/current/refer ...