云原生docker-cgroup资源限制

news2024/11/26 17:28:55

概述

Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。
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。

cd /sys/fs/cgroup/cpu/docker/容器id

在这里插入图片描述

在这里插入图片描述

进行压力测试:

docker exec -it 容器id/容器名 sh
vim /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

chmod +x /cpu.sh
./cpu.sh

在这里插入图片描述

在这里插入图片描述

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

Docker 通过 --cpu-shares 指定 CPU 份额,默认值为1024,值为1024的倍数。
#创建两个容器为 c1 和 c2,若只有这两个容器,设置容器的权重,使得c1和c2的CPU资源占比为1/3和2/3。
docker run -itd --name c2 --cpu-shares 512 centos:7
docker run -itd --name c3 --cpu-shares 1024 centos:7

yum install -y epel-release
yum install -y stress

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

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

可以看到在 CPU 进行时间片分配的时候,容器 c2 比容器 c1 多一倍的机会获得 CPU 的时间片。
但分配的结果取决于当时主机和其他容器的运行状态, 实际上也无法保证容器 c1 一定能获得 CPU 时间片。比如容器 c1 的进程一直是空闲的,那么容器 c2 是可以获取比容器 c1 更多的 CPU 时间片的。极端情况下,例如主机上只运行了一个容器,即使它的 CPU 份额只有 50,它也可以独占整个主机的 CPU 资源。

Cgroups 只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效。因此,无法单纯根据某个容器的 CPU 份额来确定有多少 CPU 资源分配给它,资源分配结果取决于同时运行的其他容器的 CPU 分配和容器中进程运行情况。

在这里插入图片描述

在这里插入图片描述

③设置容器绑定指定的CPU

#先分配虚拟机4个CPU核数
docker run -itd --name test7 --cpuset-cpus 1,3 centos:7 /bin/bash

#进入容器,进行压力测试
yum install -y epel-release
yum install stress -y
stress -c 4

#退出容器,执行 top 命令再按 1 查看CPU使用情况。

先lscpu查看cpu的数量

在这里插入图片描述

对内存使用的限制:

-m(–memory=) 选项用于限
制容器可以使用的最大内存
docker run -itd --name test8 -m 512m centos:7 /bin/bash

docker stats

在这里插入图片描述
限制可用的 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配额控制(blkio)的限制:

–device-read-bps:限制某个设备上的读速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:docker run -itd --name test9 --device-read-bps /dev/sda:1M centos:7 /bin/bash

–device-write-bps : 限制某个设备上的写速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:docker run -itd --name test10 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

–device-read-iops :限制读某个设备的iops(次数)

–device-write-iops :限制写入某个设备的iops(次数)

#创建容器,并限制写速度
docker run -it --name test10 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

#通过dd来验证写速度
dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct #添加oflag参数以规避掉文件系统cache

在这里插入图片描述
清理docker占用的磁盘空间:
docker system prune -a #可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

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

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

相关文章

【剑指offer】调整数组顺序使奇数位于偶数前面

文章目录 题目思路相对位置可以改变的思路相对位置不能改变的思路 题目 题目链接入口:调整数组顺序使奇数位于偶数前面 示例1: 输入:[1,2,3,4,5,6] 结果:[1,3,5,2,4,6] 示例2: 输入:[1,2,2,3,4,4,5,6,7…

2023年前端面试高频考点之 通信(渲染、http、缓存、异步、跨域)

目录 浏览器从输入url到渲染页面 过程⭐⭐⭐ Http和Https区别⭐⭐⭐ GET和POST发送请求⭐⭐⭐ 异同 http版本⭐⭐⭐ http状态码⭐⭐⭐ TCP⭐⭐⭐ 三次握手 四次挥手 流量控制(滑动窗口机制) 拥塞控制 keep-alive持久连接 TCP⭐⭐⭐ 三次握手…

Revit中绘制多坡度的迹线屋顶和构件对齐

一、Revit中创建特殊多坡度的迹线屋顶 在我们的日常生活中可以见到一些建筑屋顶为偏欧式风格的屋顶,而有时候在做迹线屋顶时也需要作出如图一所示的效果,说明特殊的多坡度屋顶也是应用非常广泛的,那我们应该如何实现绘制呢? 1.要得到如上图所…

Linux系统:安装及管理程序

安装及管理程序 一、linux源码包:1.源码包:2.二进制包:3.源码包的好处:4.源码包不足: 二、编译安装的过程:1.重点步骤: 三、挂载1.格式:2.挂载规则: 四、应用程序和系统命…

使用Jmeter进行性能测试的这套步骤,涨薪2次,升职一次

项目背景: 我们的平台为全国某行业监控平台,经过3轮功能测试、接口测试后,98%的问题已经关闭,决定对省平台向全国平台上传数据的接口进行性能测试。 01、测试步骤 1、编写性能测试方案 由于我是刚进入此项目组不久&#xff0c…

2023年专业连锁行业研究报告

第一章 行业概况 专业连锁行业是指以连锁经营模式运营的公司,其主要业务涵盖零售、餐饮、酒店、医疗、教育等领域。这些公司通过规模化、标准化的经营模式和供应链管理,提供专业化、高质量的产品和服务。专业连锁行业在全球范围内蓬勃发展,并…

LeetCode - 1 两数之和

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 1. 两数之和 - 力扣(LeetCode) 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那 两个整数,并返回它们…

Jmeter接口测试实战篇:10分钟学会Jmeter的用法

一提到接口测试,通常大家会有这样的疑问:前端测试不是已经覆盖到各种业务逻辑了吗?为什么还要做接口测试,接口测试和前端测试是不是重复了?对于这个问题,可以从下面几个方面来解释: 什么是接口…

架构之冷热分离

本文依据《从程序员到架构师》阅读有感,记录书中案例并且结合作者工作经历进行分析。 当数据量过大,业务查询慢甚至导致数据库服务器CPU飙升,导致数据库宕机,影响用户体验。 场景: 1.客户两年多产生了近2000万的工单…

k聚类简单实现(灰度分割,分黑白)

加载图像: k聚类分割后图像,分成黑白两类,故意把结果黑色类染红,核对发现是正确的: 具体算法如下: float globu1 40; float globu2 180; public void k均值迭代法更新(int imgw, int imgh, byte…

云晶-新一代云上操作系统的新定义,价值,应用范围

本文,从人类社会信息化到数字化的演变过程,以及当前的企业数字化现状,并回顾信息技术的几次革命来阐述总结操作系统的价值和意义。我们基于行业发展规律,重新定义了云晶-云上操作系统的架构和建设要点。并给出了大胆设想。 您也许…

大模型部署实战(一)——Ziya-LLaMA-13B

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

【TA100 】图形 2.1 色彩空间介绍

->如何描述色彩 不要感性的认知,我们来 正经讨论,探究问题的本质- - ->色彩科学。 一、色彩发送器(光源发射角度) ->以面向对象的思想来理解: ● 出生点:光源 ● Object:射线&#…

15 【Vue-Router】

1.相关理解 1.1 vue-router 的理解 vue的一个插件库,专门用来实现SPA应用 1.2 对SPA应用的理解 1.单页Web应用(single page web application,SPA) 2.整个应用只有一个完整的页面 3.点击页面中的导航链接不会刷新页面&#xff…

STM32任务调度

目录 什么是任务调度? FreeRTOS的任务调度规则是怎样的? 抢占式调度运行过程 时间片调度运行过程 任务的状态 任务综合小实验 实验需求 cubeMX配置 什么是任务调度? 调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。 Fr…

编程新手如何提高编程能力?

如果刚开始写代码时能读一读《整洁代码的艺术》那是个不错的选择。这本书会告诉您, 如何应用九大原则来提高编程能力。 良好的编程技能带来更整洁的代码, 让您更专注、更有效地利用时间,得到更高质量的结果。只要应用本书中提到的那些原则&am…

springboot集成rabbitmq

简介 RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 RabbitMQ 主要是为了实现系统之间的双向解耦而实…

【LeetCode】HOT 100(4)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

容器(第三篇)docker-cgroup资源限制

Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 ControlGroups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 CPU、内存、…

一路狂飙,性能测试流程与性能测试主要指标整理,直接上高速...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试实战 性…