Docker CPU 资源控制
01-本章背景知识
在生产环境里运行服务的一个主要问题是如何公平有效的进行资源分配。
1、Docker 容器使用核心操作系统的 Cgroups 管理容器的 CPU资源分配。
2、Docker 容器资源竞争时,默认使用简单均分(CFS)算法。
3、Docker 容器也可以根据用户需求自定义限制某个容器或者某类容器的 CPU资源。
编者注:本章所有的 CPU 资源是指 CPU 的逻辑个数,而不是物理个数。
一、CPU CFS 调度
1、CFS 是 LInux 内核的 CPU 调度程序。
2、CFS 用于限制 Linux 进程的资源限制和资源使用量。
3、Docker 会根据 CFS
配置修改 Cgroups
资源组配置,从而达到资源限制的目的。
4、针对容器限制的相关参数。
Option | 说明 |
---|---|
--cpus=<value> | 指定一个容器可以使用多少可用的资源。例如:主机有两个 CPU,而你设置 --cpus="1.5" ,那么容器可以使用 1.5 个 CPU 可以被它所使用。这个选项相当于设置 --cpu-period="100000" 和 --cpu-quota="150000" . |
--cpu-period=<value> | 指定容器对 CPU 的使用要在多长时间内做一次重新分配。需要与 --cpu-quota 一起使用,默认为 100000 微妙(100 毫秒),一般这个参数值无需修改。 |
--cpu-quota=<value> | 是用来指定在这个周期内,最多可以有多少时间用来跑这个容器,单位为微秒,一般这个参数值无需修改。。 |
--cpuset-cpus | 指定一个容器可以使用特定的 CPU 个数,第一个 CPU 的编号为 0,依次类推 1,2,3,4 。例如:--cpuset-cpus=0-3 使用第一,第二,第三,第四 CPU)。--cpuset-cpus=0-1,3 (使用第一,第二,第三 CPU。) |
--cpu-shares | 当一个容器启动起来后,会得到一个 CPU 的默认为 1024 的值。当只有一个进程在运行的时候,他对一个 CPU 内核 100% 使用权,不管他有多少 CPU 份额。当和其他容器竞争 CPU 的时候,这个数值才有用。 |
5、 --cpu-shares
详细说明。
假设有 3 台容器(A、B 和 C)同时都在试图使用所有的可用 CPU 资源,并且只有一个 CPU 。
(1)如果他们的 CPU 份额相等,那么每个容器都可以分配到 1/3 的 CPU;
(2)如果 A 和 B 拿到 512,C 拿到 1024,那么 C 将获得 CPU 的一半,A 和 B 各活的 1/4;
(3)如果 A 拿到 10,B 拿到 100,C 拿到 1000,A 可拿到的 CPU 资源为 1%,并且只有在 B 和 C 空闲的时候才能做一些资源消耗较大的工作。
(4)Docker 会尽量将容器的负载分配到所有内核上。如果两个容器在一个双核机器上运行,那么容器权重就会失效。
(5)计算公式如下:
【当前容器份额数值】/【所有容器数值总和】=当前资源权重。
10\10+100+1000 =0.09* 100%=0.9%。
二、CPU 动态调度
1、对 Docker 服务配置时,为全局动态调整方式。
2、对 Docker 容器配置时,为局部动态调整方式。开启动态调度功能首先要配置宿主机操作系统内核。
3、CPU动态调度宿主机操作系统内核配置文件。
参数文件 | 说明 |
---|---|
cpu.rt_period_us | 统计 CPU 使用时间的周期,单位 us,最小值为 1 ,t > 1。参数值大:适用于 OLAP 系统。粒度小:适合进程高并发使用,适用于 OLTP 系统。 |
cpu.rt_runtime_us | 周期内允许任务使用单个 CPU 核的时间,如果系统中有多个核,则可以使用核倍数的时间,单位 us,最小值为 0。参数值大:适用于 OLAP 系统。粒度小:适合进程高并发使用,适用于 OLTP 系统。 |
CPU动态调度是内核的高级功能,一般不需要更改这些值,如果配置不当,则主机系统将变得不稳定或者无法使用。
4、全局 Docker服务配置参数。
参数 | 说明 |
---|---|
–cpu-rt-runtime=950000 | 单位为微秒。确保实时调度程序的容器可以在 100000 微妙时间内运行 950000 微秒,至少有 50000 微秒可用于非实时任务。 |
–cpu-rt-period=100000 | 指定 CPU CFS 调度器周期,需要与 --cpu-quota 一起使用,默认为 100000 微妙(100 毫秒),一般这个参数值无需修改。 |
5、局部容器级别动态调度参数。 |
选项 | 说明 |
---|---|
–cap-add=CAP_SYS_NICE | 允许提升优先级及设置其他进程的优先级的开关参数。 |
–cpu-rt-runtime | 表示的时间 (缺省是 0.95 s)之后才能被重新调度。必须设置了–cap-add=sys_nice 参数才能使用。 |
–ulimit rtprio | 允许容器设置的最大实时优先级,必须设置了–cap-add=sys_nice 参数才能使用。 |
LAB 01-容器 CPU 资源静态限制
一、指定容器使用一个 CPU
1、指定使用第一个 CPU。
$ docker run --cpuset-cpus=0 centos:7 -c 'cat /dev/zero
>/dev/null'
2、启动另外的终端窗口,使用 top
命令会显示出这些个容器只使用了第一个 CPU。
$ top
二、指定容器使用多个 CPU
1、指定使用第一个、第二个、第四个 CPU 。
docker run --cpuset-cpus=0-1,3 centos:7 -c 'cat /dev/zero
>/dev/null'
2、启动另外的终端窗口,使用 top
命令会显示出这些容器只使用了第些 CPU。
$ top
三、指定容器使用的 CPU 权重
1、指定两个容器同时使用第一个 CPU。
2、第一个容器权重为 10000 。
3、第二个容器权重为 1.
4、第二个容器分配的 CPU 资源非常少。
docker run --cpuset-cpus=0 -c 10000 ubuntu:14.04 \
sh -c 'cat /dev/zero > /dev/null' &
docker run --cpuset-cpus=0 -c 1 -it ubuntu:14.04 bash
编者注:可以看到在 bash 中执行操作是非常缓慢的。
LAB02-容器 CPU 资源动态限制
一、配置宿主机内核参数
验证在 Linux 内核中是否启用动态调整功能。更多详细的内核实时调度程序,请参见操作系统文档。
cat /sys/fs/cgroup/cpu,cpuacct/cpu.rt_runtime_us
cat /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_period_us
编者注:如果上述命令有输出信息,则动态调整功能是打开的。
二、对 kcm_centos 01 容器开启进程调度功能
docker run -it \--cpu-rt-runtime=950000 \--ulimit rtprio=99 \--cap-add=sys_nice \--name kcm_centos01centos:7.2:1152
相关文章:
Docker CPU 资源控制
01-本章背景知识 在生产环境里运行服务的一个主要问题是如何公平有效的进行资源分配。 1、Docker 容器使用核心操作系统的 Cgroups 管理容器的 CPU资源分配。 2、Docker 容器资源竞争时,默认使用简单均分(CFS)算法。 3、Docker 容器也可以根…...
小红书数据平台:笔记爆文率提升的三大秘诀公式!
导语 对于小红书商家 / 博主来说,写出爆文就像买彩票,根本不能预知哪一篇会爆。2023年,小红书哪些内容会脱颖而出呢?我们又该如何把握热点趋势,实现优质内容转化出爆文~ 美妆作为小红书的长红赛道,本文我…...

Spring MVC 之Tomcat启动流程
从web.xml说起在开始 Spring MVC 的分析之前,先来聊一聊 Java 初学者接触的最多的 Java Web 基础。还记得我的第一个 Web 工程是由 Servlet、Velocity 和 Filter 来完成的,那时几乎所有人都是根据 Servlet、JSP 和 Filter 来编写自己的第一个 Hello Worl…...

大疆车载更新产品矩阵,覆盖从主动安全到城区领航的全场景
新年智驾供应商的攻势,也像车企一样猛烈。大疆车载近期趁着官网更新,对外公布了梳理后的智驾方案序列,覆盖8大功能产品:主动安全、行车辅助、泊车辅助、记忆泊车、记忆行车、跨层记忆泊车、领航高速、领航城区。需要关注的是&…...

总结Anisble中的任务执行控制并练习
文章目录一、循环1.简单循环2.循环散列或字典列表二、条件三、触发器四、处理失败任务1.ignore_errors2.force_handlers3.changed_when4.failed_when5.block五、 练习建立大小为1500M名为/dev/sdb1的设备利用ansible循环安装且开启vsftpd,apache,dns&…...

PMP好考吗,有多大的价值?
关于PMP考试题型及考试内容,PMP考试共200道单选题,其中25道题不计分,会被随机抽查,答对106道题以上通过考试,参考比例106/175,60.57%估计答对(10625)道题及上即可通过,参…...
http常用状态码(204,304, 404, 504,502)含义
网络状态码含义,常用(204,304, 404, 504,502) 200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务不可用 常见HTTP状态码大全 1xx(临时响应) 表示临时响应并需要请求者继…...

记录锁,间隙锁,插入意向锁,临键锁兼容关系
插入意向锁是什么? 注意!插入意向锁名字里虽然有意向锁这三个字,但是它并不是意向锁,它属于行级锁,是一种特殊的间隙锁。 在MySQL的官方文档中有以下重要描述: An Insert intention lock is a type of gap…...

map相关接口(map接口、HashMap、LinkedHashMap、TreeMap)
Java知识点总结:想看的可以从这里进入 目录8.3、map结构8.3.1、 map接口8.3.2、HashMap8.3.3、LinkedHashMap8.3.4、TreeMap8.3、map结构 8.3.1、 map接口 map的集合是以键值对的形式存在的 (key-value),每个键只能对应一个值,通常通过键去…...

抽象工厂模式(Abstract Factory Pattern)
1.抽象工厂模式定义: 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类 2.抽象工厂模式适用场景: 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量…...

Linux驱动学习笔记
驱动学习笔记 1、字符设备驱动 Linux 驱动有两种运行方式 第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启 动的时候就会自动运行驱动程序。 第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko),在 Linux 内核启动以后使用“insmod”命…...
tarfile — 访问 Tar 压缩文件
tarfile — 访问 Tar 压缩文件 1.概述 tarfile 模块提供对 Unix tar 存档的读写访问,包括压缩文件。除了 POSIX 标准之外,还支持几种 GNU tar 扩展。还提供处理 Unix 特殊文件类型,如硬链接和软链接,以及设备节点. 虽然 tarfile…...
C++14深度探索之C++基础-共享指针与弱指针使用
shared_ptr : 共享指针 管理多个客户使用的内存,多客户都拥有该内存块, 当共享指针不再拥有该内存时,内存会自动释放, 多用于并发领域,当所有访问该内存的线程都退出时,释放该内存 共享指针可被随意复制,与独占指针相反,独占指针不能被复制 在内存与时间上有一定的开销…...

【React全家桶】reac组件通信
🎞️🎞️🎞️ 博主主页: 糖 -O- 👉👉👉 react专栏:react全家桶 🌹🌹🌹希望各位博主多多支持!!&a…...

2023,再转行去做软件测试还有前途吗?
近年来,以云计算、移动互联网、物联网、工业互联网、人工智能、大数据及区块链等新一代信息技术构建的智能化应用和产品出现爆发式增长,突破了传统对于软件形态的认知,软件形态正以各种展现方式诠释着对新型智能软件的定义。这也使得软件的质…...
Java程序API数据接口
API:应用程序接口(API:Application Program Interface) 一、使用数据接口的作用 1、封装逻辑 数据接口从数据库查询出数据,并组织成json格式,这个逻辑如果在每个终端都写一遍,那样将编写大量…...
剑指offer 7 数组中和为0的三个数
此问题属于nsum问题,题目链接:力扣 要求在数组中找到不重复的三元组,三个数加起来为0,且每个下标只能用一次。而且需要返回所有这样的不重复数组。 1. 排序 双指针 1. 「不重复」的本质是什么?我们保持三重循环的大…...

DockerFile
大家想想,Nginx,tomcat,mysql 这些镜像都是哪里来的?官方能写,我们不能写吗? 我们要研究自己如何做一个镜像,而且我们写的微服务项目以及springboot打包上云部署,Docker就是最方便的…...

Vue-Router 介绍及路由原理分析
文章目录Vue-Router 路由模式单页面与传统页面跳转的区别Hash 模式History 模式abstract 模式原理解析Hash 模式原理History 模式原理路由使用引入 Vue-Router获取全局路由跳转参数的变化获取路由中带的参数重定向页面Vue-Router 路由模式 单页面与传统页面跳转的区别 单页面…...

git代码提交后jenkins构建和自动部署
利用jenkins和gitlab的webhook结合,实现提交代码之后,自动触发jenkins的构建。顺带介绍一下通过触发器构建,比如直接通过url去触发的方式。 一、jenkins结合webhook 1、jenkins配置 a、首先jenkins得需要安装两个gitlab的插件:(…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...

Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...

今日行情明日机会——20250609
上证指数放量上涨,接近3400点,个股涨多跌少。 深证放量上涨,但有个小上影线,相对上证走势更弱。 2025年6月9日涨停股主要行业方向分析(基于最新图片数据) 1. 医药(11家涨停) 代表标…...