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的插件:(…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...