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的插件:(…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
