Docker资源限制

目录

Cgroup资源控制

CPU限制

设置CPU使用率上限

下载并使用压测工具

对存在的容器做资源限制

创建容器时做资源限制

设置CPU资源占用比

设置容器绑定指定的CPU

内存限制

设置容器能够使用的内存

设置swap的上限

磁盘IO限制

清理docker占用的磁盘空间


Cgroup资源控制

限制容器进行对CPU 内存 磁盘IO 等资源的最大使用量

  • Cgroup 是 ControlGroups 的缩写。
  • 是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 CPU、内存、磁盘 IO 等等) 的机制,被 LXC、docker 等很多项目用于实现进程资源控制。
  • Cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O 或内存的分配控制等具体的资源管理是通过该功能来实现的。

CPU限制

设置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。
docker ps -a
cd /sys/fs/cgroup/cpu/docker/
cd 3c70f52f21f6f89b142768ba965387eee461dbfb641e0fa35e9cd030d65d8557
---------------------------------------------------------------------------------------------------------
#cpu.cfs_period_us:cpu分配的周期(微秒,所以文件名中用 us 表示),默认为100000。
#cpu.cfs_quota_us:表示该cgroups限制占用的时间(微秒),默认为-1,表示不限制。 如果设为50000,表示占用50000/100000=50%的CPU。
---------------------------------------------------------------------------------------------------------

下载并使用压测工具

如何下载

docker pull centos:7                              #下载测试所用镜像
docker run -id --name a1 centos:7 bash            #创建运行容器
docker ps
 
cd /etc/yum.repos.d/
docker cp CentOS-Base.repo a1:/etc/yum.repos.d/   #复制阿里云镜像到a1容器中
docker exec -it a1 bash                           #登录a1容器
 
yum install -y epel-release
yum install -y stress                             #安装stress

如何使用

stress -c 2              #进入容器进行压测

再开一个窗口,发现两个CPU都为100%用光了所有资源(top之后按1)


 

对存在的容器做资源限制

设置资源占用时间为50000,总周期的一半,代表CPU最大只能占用总周期的一半

cd /sys/fs/cgroup/cpu/docker/
ls
cd fb32e010940d9c1c68b9b6ebabe02fa5830c8bf5b3156f7ea29831eee7ee8548/
echo 50000 > cpu.cfs_quota_us 

使用压测工具

不超过50%

docker exec -it a1 bash      #进入容器
stress -c 1                  #进行测压

#第二个窗口
top                          #查看进程
#top之后按1

两个加起来也不会超过50%

stress -c 2           #两个压力测试

创建容器时做资源限制

重新创建运行一个容器,--cpu-period指定1000000周期,--cpu-quota指定500000占用时间

#重新创建运行一个容器,--cpu-period指定1000000周期,--cpu-quota指定500000占用时间

例:
docker run -di --name a2 --cpu-period 100000 --cpu-quota 50000 centos:7 bash

cd /sys/fs/cgroup/cpu/docker/
cd bd5b816af1160bfbf04e970fd45ee58f291260cd05a651fa652baf308fce473a

设置CPU资源占用比

设置多个容器时才有效

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

docker run --cpu-shares 容器进程最大占用的CPU份额(值为1024的倍数)

#a1容器为2048 ; a2容器为1024 。 那c1与c2为 2∶1

设置容器绑定指定的CPU

docker run --cpuset-cpus CPUID[,CPUID2,....]

内存限制

设置容器能够使用的内存

-m(--memory=) 选项用于限制容器可以使用的最大内存

例:
docker run -id --name a1 -m 512m centos:7 bash
docker stats           

设置swap的上限

限制可用的 swap 大小, --memory-swap;--memory-swap 是必须要与 --memory 一起使用的

正常情况下,--memory-swap 的值包含容器可用内存和可用 swap。
所以 -m 300m --memory-swap=1g 的含义为:容器可以使用 300M 的物理内存,并且可以使用 700M(1G - 300)的 swap。
 
如果 --memory-swap 设置为 0 或者 不设置,则容器可以使用的 swap 大小为 -m 值的两倍。
如果 --memory-swap 的值和 -m 值相同,则容器不能使用 swap。
如果 --memory-swap 值为 -1,它表示容器程序使用的内存受限,而可以使用的 swap 空间使用不受限制(宿主机有多少 swap 容器就可以使用多少)。

磁盘IO限制

docker run --device-read-bps    磁盘设备文件路径:速率        #限制容器在磁盘上每秒读的数据量
           --device-write-bps   磁盘设备文件路径:速率        #限制容器在磁盘上每秒写的数据量
           --device-read-iops   磁盘设备文件路径:次数        #限制容器在磁盘上每秒读的次数
           --device-write-iops  磁盘设备文件路径:次数        #限制容器在磁盘上每秒写的次数

清理docker占用的磁盘空间

docker system prune -a			#可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络
  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值