当前位置: 首页 > news >正文

容器的CPU

1、限制进程的CPU

在这里插入图片描述
通过Cgroup来限制进程资源的使用,CPU Cgroup 是 Cgroups 其中的一个 Cgroups 子系统,它是用来限制进程的 CPU 使用的。

  • cpu.cfs_period_us,它是 CFS 算法的一个调度周期,一般它的值是 100000,以 microseconds 为单位,也就 100ms。
  • cpu.cfs_quota_us,它“表示 CFS 算法中,在一个调度周期里这个控制组被允许的运行时间,比如这个值为 50000 时,就是 50ms。
    如果用这个值去除以调度周期(也就是 cpu.cfs_period_us),50ms/100ms = 0.5,这样这个控制组被允许使用的 CPU 最大配额就是 0.5 个 CPU。(很有意思)

启动了一个进程,不断死循环,在一个四核的机器上会占用25%的cpu。
在这里插入图片描述
并且这个进程的pid是8683,然后我们对这个进程的cpu使用率进行限制。
在这里插入图片描述

首先将进程id写入cgroup.procs文件中,并向cpu.cfs_quota_us中写入50000,也就代表这个进程最多只能使用半个cpu。再执行top看下具体信息:
在这里插入图片描述
可以看到已经被限制住了。像k8s的pod中cpu的limit就是修改的这个值。

  • cpu.shares。这个值是 CPU Cgroup 对于控制组之间的 CPU 分配比例,它的缺省值是 1024。
    Request CPU"就是无论其他容器申请多少 CPU 资源,即使运行时整个节点的 CPU 都被占满的情况下,我的这个容器还是可以保证获得需要的 CPU 数目,那么这个设置具体要怎么实现呢?显然我们需要设置 cpu.shares 这个参数:在 CPU Cgroup 中 cpu.shares == 1024 表示 1 个 CPU 的比例,那么 Request CPU 的值就是 n,给 cpu.shares 的赋值对应就是 n*1024。

其中容器相关的配置在这个目录下,对应的文件也是这些,可以针对每个容器中的所有进程进行cpu的限制。
在这里插入图片描述
在这里插入图片描述

2、如何正确拿到容器的CPU可销

在传统虚拟机时代,我们习惯使用top来查看进程所占用的CPU情况,但是在容器环境下这个就不那么好用了。
在这里插入图片描述
如图所示:容器中所有进程和的CPU使用率都是0.0但是总的CPU使用率却是25%,这是为什么呢?
再看一下宿主机上上的cpu使用情况:
在这里插入图片描述
不难发现宿宿主机上的cpu使用率和容器上的cpu使用率是一样的。
因此这个例子说明,在容器中使用top命令获取容器的cpu使用率是有问题的。

daixu

3、容器与Load Average

为什么使用了CPU Cgroup限制了容器对CPU的使用率,但是系统的Load Average还是会受容器进程的影响而升高呢?

什么是Load Average,字面意思是平均负载,这个东西怎么理解呢?当我们发现系统慢的时候,一般会使用uptime 或者top命令来查看cpu的情况,其中:
在这里插入图片描述
load averages 代表过去1分钟,5分钟,15分钟系统的平均负载。
但是平均负载该如何理解呢?平均负载指的是平均活跃进程或者线程数,这里的活跃包括可运行和不可中断,也就是说不仅是活跃的线程也包含了等待cpu和等待IO的进程。

在这里插入图片描述
因此要回答系统的Load Average还是会受容器进程的影响而升高的问题就很简单,因为Load Average不仅包含了运行的进程数,还包含了等待资源的进程数量。而CPU Cgroup限制的是运行的进程,而限制不了处于等待状态的进程。


http://www.mrgr.cn/news/97010.html

相关文章:

  • CAD插入属性块 弹窗提示输入属性值——CAD知识讲堂
  • GenerationMixin:_sample方法(GenerationMode.SAMPLE, GenerationMode.GREEDY_SEARCH)
  • [C语言入门] 结构体
  • 接口自动化学习二:session自动管理cookie
  • Maven+Spring实现后端开发
  • Pytorch中预置数据集的加载方式
  • 数据结构学习
  • 大模型学习二:DeepSeek R1+蒸馏模型组本地部署与调用
  • 【MyBatis】深入解析 MyBatis:关于注解和 XML 的 MyBatis 开发方案下字段名不一致的的查询映射解决方案
  • 操作系统(二):实时系统介绍与实例分析
  • python match case语法
  • Vue3 Pinia Store 新建store示例、使用store示例
  • 【大模型】SpringBoot整合LangChain4j实现RAG检索实战详解
  • ros2--gazebo--launch
  • 【gdutthesis模板】章节标题有英文解决方案
  • Tmux 核心操作速查指南
  • 【c++深入系列】:类与对象详解(中)
  • STM32单片机入门学习——第12节: [5-2]对射式红外传感器计次旋转编码器计次
  • 基于yolo11的BGA图像目标检测
  • 动、静态创建任务