Docker的资源控制管理

1、CPU控制

2、对内存使用进行限制

3、对磁盘I/O配额控制的限制

1、CPU控制:

  cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,
还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups (Control groups) 实现了对资源的配额和度量。

cgroups有四大功能:

  1. 资源限制:可以对任务使用的资源总额进行限制;
  2. 先级分配:通过分配的cpu时间片数量以及磁盘I0带宽大小,实际上相当于控制了任务运行优先级;
  3. 资源统计:可以统计系统的资源使用量,如cpu时长, 内存用量等;
  4. 任务控制: cgroup可以对任务执行挂起、恢复等操作。

设置CPU使用率上限:

  • Linux通过CFS ( Completely Fair Scheduler, 完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是100ms。
  • 可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU时间。
  • 使用--cpu-period即可设置调度周期,使用--cpu-quota即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。
  • CFS周期的有效范围是1ms~1s, 对应的--cpu-period的数值范围是1000~1000000。
  • 容器的CPU 配额必须不小于1ms,即--cpu-quota 的值必须>= 1000。

查看CPU使用率:

docker run -itd --name test5 centos:7 /bin/bash

docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85c7a6860f72 centos:7 "/bin/bash" 4 seconds ago Up 4 seconds test5 cd /sys/fs/cgroup/cpu/docker/85c7a6860f72d66e36c924977891c170c111fb86a6f9b263c2bce36b0415e61c/ cat cpu.cfs_period_us cpu.cfs_quota_us
100000
-1

 

测试CPU使用率:

docker exec -it 23f23129d461 bash

vi cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done chmod +x cpu.sh
./cpu.sh &
另一个终端使用top查看

  

设置CPU使用率:

#设置508的比例分配CPU使用时间上限
docker run -itd --name test6 --cpu-quota 50000 centos:7 /bin/bash #可以重新创建一个容器并设置限额
或者
cd /sys/fs/cgroup/cpu/docker/45a914abdf2b9d173be7dd383c685b44d118bbb5d6bd3ef81b3a8c728a352f53/
echo 50000 > cpu.cfs_quota_us #修改参数 cat cpu.cfs_quota_us cpu.cfs_period_us
50000
100000 docker exec -it 45a914abdf2b bash
./cpu.sh 另一个终端使用top查看

  

设置CPU资源占用比(设置多个容器时才有效):

Docker通过--cpu-shares指定CPU份额,默认值为1024,值为1024的倍数。

示例:创建两个容器为test1 和test2, 若只有这两个容器,设置容器的权重,使得test1和test2的CPU资源占比为1/3和2/3。

docker run -itd --name test1 --cpu-shares 1024 centos:7
docker run -itd --name test2 --cpu-shares 512 centos:7 #分别进入容器,进行压力测试
docker exec -it 2e71bd7f3c4c bash
yum install -y epel-release
yum install stress -y
stress -c 4 #产生四个进程,每个进程都反复不停的计算随机数的平方根 #查看容器的运行状态(动态更新)
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
2e71bd7f3c4c test2 32.96% 1.562MiB / 976.3MiB 0.16% 25.5MB / 137kB 179MB / 25.2MB 1
ffbdd0ef2781 test1 65.86% 12.2MiB / 976.3MiB 1.25% 25.5MB / 102kB 122MB / 25.2MB 1

2、对内存使用进行限制:

docker run -itd --name test4 -m 512m centos:7 bash

docker stats

  

3、对磁盘I/O配额控制的限制:

–device - read-bps:限制某个设备上的读速度bps (数据量),单位可以是kb、mb (M)或者gb。

docker run -itd --name test5 --device-read-bps /dev/sda:1M centos:7 bash

  

–device-write-bps :限制某个设备上的写速度bps (数据量),单位可以是kb、mb (M)或者gb。

docker run -itd --name test5 --device-write-bps /dev/sda:1M centos:7 bash

--device-read-iops :限制读某个设备的iops (次数)
--device-write-iops :限制写入某个设备的iops (次数)
[root@docker ~]# docker run -itd --name test5 --device-write-bps /dev/sda:1M centos:7 bash
9039c0c86ae377ccd92373dba7bf6663e77af571fed25a799c0dc415043daf98 [root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9039c0c86ae3 centos:7 "bash" 8 seconds ago Up 7 seconds test5 [root@docker ~]# docker exec -it 9039c0c86ae3 bash
[root@9039c0c86ae3 /]# mkdir /test
[root@9039c0c86ae3 /]# cd test/ #通过dd来验证写速度
[root@9039c0c86ae3 test]# dd if=/dev/zero of=test.txt bs=2M count=5 oflag=direct #添加oflag参数以规避掉文件系统cache
5+0 records in
5+0 records out
10485760 bytes (10 MB) copied, 10.0057 s, 1.0 MB/s

  

 

 

 

 

 

Docker的资源控制管理的更多相关文章

  1. Docker运行资源控制

    概述 ​ 一个 docker host 上会运行若干容器,每个容器都需要 CPU.内存和 IO 资源.对于 KVM,VMware 等虚拟化技术,用户可以控制分配多少 CPU.内存资源给每个虚拟机.对于 ...

  2. docker容器资源配额控制

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

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

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

  4. Docker背后的容器管理——Libcontainer深度解析

    Libcontainer 是Docker中用于容器管理的包,它基于Go语言实现,通过管理namespaces.cgroups.capabilities以及文件系统来进行容器控制.你可以使用Libcon ...

  5. Docker 三种UI管理平台

    docker集中化web管理平台 一.shipyard 1.启动docker,下载镜像 # systemctl restart docker # docker pull alpine # docker ...

  6. Docker 与 Podman 容器管理的比较

    翻译自 Paul Ferrill 2020年9月1日的文章<Compare Docker vs. Podman for container management> [1] Docker 和 ...

  7. Docker安全及日志管理

    Docker安全及日志管理 目录 Docker安全及日志管理 一.Docker容器与虚拟机的区别 1. 隔离与共享 2. 性能与损耗 3. 总结 二.Docker存在的安全问题 1. Docker自身 ...

  8. Docker 安全及日志管理

    Docker 安全及日志管理 容器的安全性问题的根源在于容器和宿主机共享内核. 容器里的应用导致Linux内核崩溃,那么整个系统可能都会崩溃. 虚拟机并没有与主机共享内核,虚拟机崩溃一般不会导致宿主机 ...

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

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

随机推荐

  1. eDiary电子日记本

    1.简介 eDiary是一款小巧的本地电子日记本, 也可以用来管理资料文档, 支持常用的文字编辑排版功能, 也支持插入图片功能. 支持多用户,可以设置登录用户名和密码, 每个用户可拥有多个日记文件, ...

  2. Docker基本命令入门

    本文介绍Docker基本的操作命令,包括对镜像容器的获取,查看,保存,启停等操作. 1. 检查docker的版本: docker version docker -v 2. 搜索名字叫做tutorial ...

  3. ActiveMQ基础教程(二):安装与配置(单机与集群)

    因为本文会用到集群介绍,因此准备了三台虚拟机(当然读者也可以使用一个虚拟机,然后使用不同的端口来模拟实现伪集群): 192.168.209.133 test1 192.168.209.134 test ...

  4. 游戏中的自动寻路-A*算法(第一版优化——走斜线篇)

    一.简述以及地图 G 表示从起点移动到网格上指定方格的移动距离 (暂时不考虑沿斜向移动,只考虑上下左右移动). H 表示从指定的方格移动到终点的预计移动距离,只计算直线距离,走直角篇走的是直角路线. ...

  5. Git 标签使用详解

    列出标签 # 默认按字母排序显示 $ git tag # 模糊匹配查找标签 $ git tag -l "v1.8.5*" 创建标签 # 创建附注标签 $ git tag -a v1 ...

  6. k8s env、configmap、secret外部数据加载配置

    K8s提供了多种外部数据注入容器的方式,今天我们主要学习环境变量.ConfigMap以及Secret的使用和配置. 环境变量 在docker项目中,对一个容器添加环境变量可以在容器创建时通过-e EN ...

  7. RabbitMQ使用 prefetch_count优化队列的消费,使用死信队列和延迟队列实现消息的定时重试,golang版本

    RabbitMQ 的优化 channel prefetch Count 死信队列 什么是死信队列 使用场景 代码实现 延迟队列 什么是延迟队列 使用场景 实现延迟队列的方式 Queue TTL Mes ...

  8. Appium安装部署

    一.安装JDK 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html JD ...

  9. Webstorm安装与配置

    一 下载 链接:https://pan.baidu.com/s/1gKxzGWvnoCpXPoe8zzfLnQ 提取码:5lyf 二 安装 https://www.jb51.net/softs/598 ...

  10. Keil MDK STM32系列(七) STM32F4基于HAL的PWM和定时器

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...