Docker CPU 资源控制

news/2024/12/21 17:52:52/

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

http://www.ppmy.cn/news/25741.html

相关文章

JQuery工具框架

JQuery工具框架 直接使用js编程比较麻烦&#xff0c;而且还必须考虑浏览器的差异性。 为了简化javascript的开发&#xff0c;一些javascript库诞生了。当今流行的javascript库有&#xff1a;jQuery诞生于2005 年&#xff0c;Dojo、 EXT_JS、DWR、YUI… jQuery是John Resig在…

链表:反转链表、快慢指针、删除链表【零神基础精讲】

来源0x3f&#xff1a;https://space.bilibili.com/206214 文章目录反转链表[206. 反转链表](https://leetcode.cn/problems/reverse-linked-list/)[92. 反转链表 II](https://leetcode.cn/problems/reverse-linked-list-ii/)[25. K 个一组翻转链表](https://leetcode.cn/proble…

Docker常用命令总结

目录 一、帮助启动类命令 &#xff08;1&#xff09;启动docker &#xff08;2&#xff09;停止docker &#xff08;3&#xff09;重启docker &#xff08;4&#xff09;查看docker &#xff08;5&#xff09;设置开机自启 &#xff08;6&#xff09;查看docker概要信息…

JAVA线程池的使用

一、池化思想和JAVA线程池 池化是很重要的思想&#xff1b;池化的好处是提供缓冲和统一的管理。这个笔者在本人的数据库连接池的博客中已经提到过了&#xff08;JAVA常用数据库连接池_王者之路001的博客-CSDN博客 &#xff09;。 线程池是另一种池化思想的运用&#xff0c;把…

小菜版考试系统——“C”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是小菜版考试系统&#xff0c;最近一直在忙C语言课程设计的事&#xff0c;那么&#xff0c;就请uu们看看我的学习成果吧。 课程设计任务 摘要 题目分析 流程图 关键程序代码 程序运行结果 结论与心得 参…

2023年美赛赛题思路分析

2023年的赛题A-F题的整体难度不算太难&#xff0c;难度在于数据的收集上。整体难度上来看&#xff0c;难度上F题难度最小&#xff0c;建议直接上手。本次先给大家分享一些数据网站&#xff0c;在对各题做简单的思路分析。1、美国国家海洋和大气管理局Homepage | National Ocean…

makefile简易教程

makefile简易教程 一、学习目标 达到多文件快速编译的需求&#xff0c;相关符号的意思&#xff0c;以及其它注意事项。 二、快速入门 2.1 基本概念 Makefile 是一个在Unix和Linux操作系统上使用的构建工具&#xff0c;用于自动化编译和构建源代码。 2.2 用处 通过Makefi…

Centos7 调整磁盘空间

1. 查看磁盘空间占用情况&#xff1a; df -h 可以看到 /home 有很多剩余空间,占了绝大部分&#xff0c; 而我又很少把文件放在home下。 2. 备份 /home 下的内容&#xff1a; cp -r /home/ /homebak/ 3. 关闭home进程&#xff1a; fuser -m -v -i -k /home 报错: -bash: fuser…