Docker---cgroups资源限制

news2024/10/7 18:22:13

目录

一、cpu资源控制

1、 设置cpu使用率上限

2、设置cpu资源占用比(设置多个容器时才有效)

3、设置容器绑定指定的CPU

三、内存资源控制

四、磁盘IO配额控制

1、限制Block IO

2、限制bps和iops进行限制

一、cpu资源控制

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

cgroups四大功能:

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

1、 设置cpu使用率上限

linux通过CFS(completely fair scheduler,完全公平调度器)来调度各个进程对cpu的使用

  • 我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少cpu时间。

  • 使用 --cpu-period 即可设置调度周期,默认100ms,设置范围为:1ms-1s,对应的 --cpu-period的数值范围是1000~1000000。

  • 使用 --cpu-quota 即可设置在每个周期内容器能使用cpu时间,默认无限制,设置的要求不能小于1ms,也就是–cpu-quota的值必须>=1000.

查看周期限制和cpu配额限制

docker run -itd --name test5 centos:7 /bin/bash
#启动一个centos:7镜像容器

docker ps -a
#查看是否启动成功,并查看pid号

cd /sys/fs/cgroup/cpu/docker/容器PID号
#进入到该容器的限制目录中

cat cpu.cfs_quota_us
#查看每个周期的cpu最大限制时间

cat cpu.cfs_period_us
#查看调度周期是多久

//cpu.cfg_period_us: cpu 分配的周期(微秒,所以文件名中用us表示),默认为100000
//cpu.cfg_quota_us: 表示该cgroups限制占用的时间(微秒),默认为-1,表示为不限制,如果设为50000,表示占用50000/100000=50%的cpu

进行cpu压力测试然后修改每个周期的使用cpu的时间,查看cpu使用率

docker run -itd --name test6 --cpu-quota 50000 centos:7 /bin/bash
#可以直接创建一个容器并设置每个周期cpu执行的时间
或者
docker run -itd --name test7 centos:7 /bin/bash
cd /sys/fs/cgroup/cpu/docker/【容器pid】
echo 50000 > cpu.cfs_quota_us
#也可以先创建一个容器,然后进入到文件中直接修改cpu执行的实际的文件名称

docker exec -it 【容器id】 /bin/bash
#进入容器

vim /cpu.sh
#!bin/bash
i=0
while true
do
let i++
done
#创建死循环脚本,为了进行cpu压力测试

chmod +x /cpu.sh
./cpu.sh
#执行脚本


top
#查看这个容器中脚本占的多少的cpu资源

2、设置cpu资源占用比(设置多个容器时才有效)

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

  • 在有多个容器竞争CPU时,我们可以设置每个容器能会用的CPU时间比例,这个比例叫做 共享权值

  • 共享式CPU资源,是按比例切分CPU资源,Docker默认每个容器的权值为1024。如果不指定或将其设置为0,都将使用默认值。

  • 通过-cpu-share并不是cpu资源的绝对数量,而是一个相对的权重值,某个容器最终能分配到的cpu资源取决于它的cpu share占所有容器 cpu share综合的比例。换句话说,通过cpu share可以设置容器使用cpu的优先级。

比如,当前系统上一共运行了两个容器,第一个容器上权重是1024,第二个容器权重是512, 第二个容器启动之后没有运行任何进程,自己身上的512都没有用完,而第一台容器的进程有很多,这个时候它完全可以占用容器二的CPU空闲资源,这就是共享式CPU资源;如果容器二也跑了进程,那么就会把自己的512给要回来,按照正常权重1024:512划分,为自己的进程提供CPU资源。如果容器二不用CPU资源,那容器一就能够把容器二的CPU资源所占用,如果容器二也需要CPU资源,那么就按照比例划分。那么第一个容器会从原来使用整个宿主机的CPU变为使用整个宿主机的CPU的2/3;这就是CPU共享式,也证明了CPU为可压缩性资源。

两个容器设置比例然后压测

docker run -itd --name c1 --cpu-shares 512 centos:7
docker run -itd --name c2 --cpu-shares 1024 centos:7
#创建两个容器为c1和c2,若只有这两个容器,设置容器的权重,使得c1和c2的cpu资源占比为1/3和2/3

分别进入到c1和c2 容器中,进行压测

docker exec -it 【容器id】 /bin/bash
#进入容器

yum -y install epel-release
#安装epel源

yum -y insyall stress
#安装cpu压力测试工具

stress -c 4
#产生四个进程,每个进程都反复不停的计算随机数的平方根

查看容器磁盘占比

docker stats 
#查看容器运行状态(动态更新)

3、设置容器绑定指定的CPU

–cpuset-cpus 是限制容器运行在指定的cpu核心

  • 运行容器运行在哪个CPU核心上,例如主机有4个核心,cpu核心标识为0-3,我们一启动容器,只想让这台容器运行在标识0和3的两个CPU核心上,可以使用cpuset来指定。
docker run -itd --name c3 --cpuset-cpus 1,3 centos:7 /bin/bash
#启动一个容器,让它只使用内核1和内核3的资源

docker exec -it 【容器id】 /bin/bash
#进入容器

yum -y install epel-release
yum -y install stress
stress -c 4
#下载压力测试工具,并测试4个核

top查看cpu使用率

三、内存资源控制

与操作系统类似,容器可以使用的内存包括两部分:物理内存和Swap

Docker通过下面两组参数来控制容器内存的使用量

  • -m 或 --memory : 设置内存的使用限额, 例如:100MB,2GB
  • –memory-swap : 设置内存+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空间该容器就可以使用多少)
docker run -itd --name m1 -m 200m --memory-swap=300M centos:7 /bin/bash
#允许该容器使用物理内存200M,swap空间为100m

docker stats
#查看容器使用资源情况

四、磁盘IO配额控制

Block IO 是另一种可以限制容器使用的资源,Block IO 指的是磁盘的读写,docker可通过设置权重,限制bps和iops的方式控制容器读写磁盘的带宽。

1、限制Block IO

默认情况下,所有容器能平等地读写磁盘,可以通过设置 --blkio-weight 参数来改变容器bliock IO 的优先级。–blkio-weight 与 --cpu-share类似,设置的是相对权重值,默认为500。

docker run -it --name b1 --blkio-weight 600 /bin/bash

docker run -it --name b2 --blkio-weight 300 /bin/bash

#上面两条中,b1容器读写磁盘的带宽是b2容器的两倍

2、限制bps和iops进行限制

bps 是 byte per second ,表示每秒读写的数据量。

iops 是 io per second ,表示每秒的输入输出量(或读写次数)

可以通过以下参数控制容器的bps和iops

  • –device-read-bps,限制读某个设备的bps(数据量)
  • –device-write-bps,限制写某个设备的bps(数据量)
  • –device-read-iops,限制读某个设备的iops(次数)
  • –device-write-iops,限制写某个设备的iops(次数)

对写bps进行限制的测试

docker run -it --name b1 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
#创建容器,限制写的数数据量为1mb/s

dd if=/dec/zero of=test.out bs=1M count=10 oflag=direct
#测试是否是写入的1MB/S

清理docker占用的磁盘空间

docker system prune -a
#可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1062098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue组件路由

1,安装vue-router组件,终端输入: npm i vue-router3.5.3 2,在src文件夹下创建router目录 3,创建index.js文件,配置路由,导入需要路由的组件。以后每次添加路由只要在routes中改变即可。 impo…

YOLOV7改进实操-添加Wise IoU,实现有效提点

1、打开utils->general.py,找到bbox_iou(),345行左右,将下面的与源码进行替换 wiou有三个版本,可以替换,看看哪一个提点多 class WIoU_Scale: monotonous: {None: origin v1True: monotoni…

NEFU数字图像处理(1)绪论

一、简介 1.1什么是数字图像 图像是三维场景在二维平面上的影像。根据其存储方式和表现形式,可以将图像分为模拟图像和数字图像两大类 图像处理方法:光学方法、电子学方法 模拟图像:连续的图像数字图像:通过对时间上和数值上连续…

PHP 选课管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 选课管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php 选课管理系统 代码 https://download.csdn.net/download/qq_41221322/88389656 二…

笔记本休眠,USB仍对外供电,关闭方法

如下图的,联想笔记本电脑不紧有对外USB供电功能,还有大对外大电流供电功能(1A,带电池符号的USB)。 如何关闭“关机/休眠时仍对外供电”的功能?比如,让笔记本在休眠时,所连接的USB风…

代码随想录算法训练营第23期day11 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项 、150. 逆波兰表达式求值

目录 一、(leetcode 20)有效的括号 二、(leetcode 1047)删除字符串中的所有相邻重复项 用栈存放 将字符串直接当成栈 三、(leetcode 150)逆波兰表达式求值 一、(leetcode 20)…

websocket实现go(server)与c#(client)通讯

go 服务端 使用到github.com/gorilla/websocket package mainimport ("fmt""github.com/gorilla/websocket""log""net/http" )func main() {var upgrader websocket.Upgrader{ReadBufferSize: 1024,WriteBufferSize: 1024,CheckOr…

GPU如何成为AI的加速器

0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。 本文关键词:GPU、深度学习、GP…

MySQL:温备份和恢复-mysqldump (4)

介绍 温备:同样是在数据库运行的时候进行备份的,但对当前数据库的操作会产生影响。(只可以读操作,不可以写操作) 温备份的优点: 1.可在表空间或数据文件级备份,备份时间短。 2.备份时数据库依然…

智能AI创作系统ChatGPT商业运营版源码+AI绘画系统/支持GPT联网提问/支持Midjourney绘画+Prompt应用+支持国内AI提问模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&…

纯css实现3D鼠标跟随倾斜

老规矩先上图 为什么今天会想起来整这个呢?这是因为和我朋友吵架, 就是关于这个效果的,就是这个 卡片懸停毛玻璃效果, 我朋友认为纯css也能写, 我则坦言他就是在放狗屁,这种跟随鼠标的3D效果要怎么可能能用纯css写, 然后吵着吵着发现,欸,好像真能用css写哦,我以前还写过这种…

【算法|动态规划No.12】leetcode152. 乘积最大子数组

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

2023.10.5 文件操作IO 经典例题

目录 例题一 例题二 例题一 扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否删除该文件 代码如下: package io;import java.io.File; import java.util.Scanner;//扫描指定目…

无约束优化方法(optimtool.unconstrain)

import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool >2.4.2无约束优化方法(optimtool.unconstrain) import optimtool.unconstrain as ou ou.[方法名].[函数名]([目标函数], [参数表], [初始迭代点])f ( x ) ∑ …

数值分析学习笔记——绪论【华科B站教程版本】

绪论 数值分析概念 用计算机求解数学问题的数值方法和理论 三大科学研究方法 实验理论分析科学计算(用计算机去辅助研究):数值方法计算机 解析解和近似解 解析解:使用数学方法求出或推导出的结果,往往可以求解出…

数据结构和算法——数据结构

数据结构: 线性结构: 顺序存储方式,顺序表 常见的顺序存储结构有:数组、队列、链表、栈 链式存储方式,链表 队列: 队列可以使用数组结构或者链表结构来存储,先入先出,后进后出。…

OK3568 forlinx系统编译过程及问题汇总

1. 共享文件夹无法加载;通过网上把文件夹加载后,拷贝文件很慢,任务管理器查看发现硬盘读写速率很低。解决办法:重新安装vmware tools。 2. 拷贝Linux源码到虚拟机,解压。 3. 虚拟机基本库安装 forlinxubuntu:~$ sudo…

【图像分割】距离正则化水平集演化及其在图像分割中的应用(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

并网逆变器+VSG控制+预同步控制+电流电流双环控制(Simulink仿真实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

微服务技术栈-初识Docker

文章目录 前言一、Docker概念二、安装Docker三、Docker服务命令四、Docker镜像和容器Docker镜像相关命令Docker容器相关命令 总结 前言 docker技术风靡全球,它的功能就是将linux容器中的应用代码打包,可以轻松的在服务器之间进行迁移。docker运行程序的过程就是去仓…