0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

容器进程调度时是该优先考虑CPU资源还是内存资源

冬至配饺子 来源:开发内功修炼 作者:张彦飞allen 2022-08-16 18:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

问题是这样的:有 A B 两台服务器,其中 A 服务器 cpu 快满了,内存很空闲。另外一台 B 服务器 cpu 很空闲,但内存快满了。现在 k8s 有一个新的任务要调度,请问应该选择哪台服务器?这其实是现在非常火的 k8s 的经典应用场景。

有的同学看到这个问题后的第一个想法是应该先评估一下新任务是计算密集型的业务还是 io 密集型的。然后再决定往哪个机器上调度。这么思考倒是也不能算错,只不过是没有抓到问题的关键点上。

这个问题的关键点是在于要思考一下调度到某个机器上可能会出现什么问题。

1. 调度到 CPU 比较满的 A 服务器

假设我们调度到 CPU 比较满的 A 机器上会出现什么状况呢?因为 CPU 资源是分时来调度的,每个进程都会得到一些时间片进行执行。所以 A 机器上不管 CPU 有多忙,再加一个的进程来运行话其实影响无非就是所有的进程都运行的更慢了一些。再换个说法,就是 CPU 资源是可以超卖的,是属于可压缩资源。

这里提一下,部分读者反馈说自己的云虚机在 CPU 飙升到 100% 的时候,云厂商为了保护主机,直接宕机。这种情况在各大公司的 IDC 机房内不太可能出现,所以这种情况咱们暂时不考虑。

2. 调度到内存比较满的 B 服务器

再假设我们调度到内存比较满的 B 机器上会出现什么状况呢?不知道你有没有遭遇过线上进程被 oom kill 掉的场景。这种情况下就是当机器物理内存不是很充足的时候,如果申请的内存过大,操作系统就可能会挑选在运行的一些进程将其杀掉。

这里稍微展开说一下,操作系统选择要杀掉的进程也不一定是内存消耗最多的服务。而是会综合内存消耗和进程的 oom_score_adj(可配置) 值来进行选择。在一些在离线混部的服务器上,往往会将在线服务进程的被杀的优先级调的低一些,离线服务进程的被杀优先级调高。这样充分保障在线服务的稳定运行。

先不考虑在离线混部的情况,假设都是在线服务,那么无论哪一个服务的进程被 Linux 给 oom kill掉影响都是非常大的。还得重新调度,而且还有可能影响服务的稳定性,以及接口的正确返回。

这里有的同学可能会说,Linux 上不是支持将内存 swap 到磁盘上吗?但其实在线上服务器中,由于磁盘的性能比内存低太多了,所以大部分的线上服务器都不会开启 swap 这个特性。因为服务的内存一旦被 swap 到内存,即使是能运行,性能也会有急剧的下降。所以一般不怎么会开启。

结论

所以对比来看,新任务在调度的时候应该优先选择 A 服务器,因为它的空闲内存比较多,不太可能出现进程被杀死的情况。虽然它的 CPU 比较满,但所有的服务仍然可以运行。

在实际中,k8s 的 API Server接受客户端提交Pod对象创建请求后的操作过程中,有一个重要的步骤就是由调度器程序kube-scheduler从当前集群中选择一个可用的最佳节点来接收并运行它。

当然实际中 k8s 的调度策略不是这么简单的,系统默认的 kube-scheduler 调度器外还有直接指定Node主机名、节点亲和性、Pod亲和性、nodeSelector 等等调度策略。

就单拿系统默认的 kube-scheduler 调度器来说的话,还会综合考虑单独和整体的资源请求、硬件/软件/策略限制、亲和以及反亲和要求、数据局域性、负载间的干扰等等这些因素对可调度节点打分,然后选出其中得分最高的 Node 来运行 Pod。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11370

    浏览量

    226407
  • 服务器
    +关注

    关注

    14

    文章

    10440

    浏览量

    91849
  • 操作系统
    +关注

    关注

    37

    文章

    7453

    浏览量

    129727
  • Linux系统
    +关注

    关注

    4

    文章

    618

    浏览量

    30236
  • SWAP
    +关注

    关注

    0

    文章

    52

    浏览量

    13748
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    飞凌嵌入式ElfBoard-进程间的通信

    、消息队列、信号量、共享内存、和套接字等方式,每种机制适用于不同的场景。⚫信号:可以异步通信,并且具有轻量级的特点,但是不能传递复杂的数据,只能携带少量信息。⚫管道:普通管道只能在父子进程之间单向通信
    发表于 05-14 08:56

    Kubernetes资源限制怎么配置

    错了——要么配太大导致资源浪费和调度不均,要么配太小导致 OOMKill 或 CPU Throttling,严重影响业务可用性。
    的头像 发表于 05-12 09:59 360次阅读

    动态流量池数据资源交付技术:破解网络流量调度的核心难题

    前言在数字经济全面渗透的当下,数据传输与网络流量已成为支撑数字业务运行的核心基础。从日常的互联网访问、企业跨地域办公,到工业物联网终端互联、智算中心的算力调度,都离不开稳定、高效的流量资源交付体系
    的头像 发表于 03-30 13:50 1977次阅读
    动态流量池数据<b class='flag-5'>资源</b>交付技术:破解网络流量<b class='flag-5'>调度</b>的核心难题

    飞凌嵌入式ElfBoard-进程进程状态

    不同的事件和条件发生变化。每次状态的变化都是由于外部条件或内部逻辑的影响。就绪 → 运行:当调度程序选择一个就绪进程并分配 CPU 资源时,该进程
    发表于 03-27 09:12

    Linux内核三大核心模块深度解析:调度内存与I/O

    优与系统开发的基石。 一、进程调度:从CFS到EEVDF的演进 进程调度负责决定哪个任务获得CPU执行权。在Linux中,
    的头像 发表于 03-12 09:00 328次阅读
    Linux内核三大核心模块深度解析:<b class='flag-5'>调度</b>、<b class='flag-5'>内存</b>与I/O

    飞凌嵌入式ElfBoard-进程之什么是进程

    脚本可执行文件:源代码通过编译、链接等步骤生成可执行文件;解释型脚本本身不需要编译,相当于可执行文件。进程是程序的动态执行实例,是程序在执行时所占用的资源集合。每个进程都有自己的内存
    发表于 01-26 08:42

    进程概念和特征

    程序及其数据在处理机上顺序执行时所发生的活动。   进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。   在引入进程实体的概念后,我们可
    发表于 01-15 06:39

    进程的控制

    、初始化处理机状态信息和初始化处理机控制信息,以及设置进程优先级等。   4. 如果进程就绪队列能够接纳新进程,就将新进程插入到就绪队列,
    发表于 01-15 06:05

    深入Linux内核:进程调度的核心逻辑与实现细节

    在Linux系统中,进程调度就像一位精明的“CPU管理员”——它决定着哪个进程优先使用CPU
    的头像 发表于 12-24 07:05 4709次阅读
    深入Linux内核:<b class='flag-5'>进程</b><b class='flag-5'>调度</b>的核心逻辑与实现细节

    嵌入式基础知识-系统调度

    调度,有许多相似之处。 1、进程的三种状态 执行态(Run):进程占用CPU资源,对于单核处理器,任一时刻只能有一个进行处于执行态。 就
    发表于 12-16 08:15

    后勤资源大模型智能调度系统:功能特点与平台架构解析

        后勤资源大模型智能调度系统解析    后勤资源大模型智能调度系统融合大数据、人工智能与机器学习技术,针对物资、设备、人员、运输工具等后勤资源
    的头像 发表于 12-15 16:35 506次阅读

    FreeRTOS任务调度优先级问题

    都有容错,但是心里没底,想向大家了解一下实际工作中有没有遇到到类似的问题,如果有又是怎么解决的呢? 另外有前辈可以分享一下任务的优先级在实际项目中基于什么原则来划分呢?
    发表于 11-06 02:18

    蜂鸟E203内核优化方法

    。 修改内核参数:对蜂鸟E203的内核参数进行相应修改,可以优化内核运行效率,提高系统性能,比如调整缓存大小、内存分配策略等。 资源管理:进行有针对的资源管理,例如调度算法的修改,调整
    发表于 10-21 07:55

    企业级HDFS高可用与YARN资源调度方案

    作为一名在大数据运维领域摸爬滚打8年的老兵,我见过太多因为基础架构不够健壮而导致的生产事故。今天,我想和大家分享一套经过实战检验的 HDFS 高可用与 YARN 资源调度方案,这套方案帮助我们团队将平台可用性从 99.5% 提升到 99.99%,年故障时间从 43 小时降
    的头像 发表于 09-08 17:15 929次阅读

    HarmonyOS优化应用预置图片资源加载耗时问题性能优化

    CPU解压缩生成的图片资源会占用较多的内存空间,给内存造成更大的压力,可能会引起卡顿掉帧。此时可以借助纹理压缩技术,将预置图片在构建过程中进行转码和压缩,节省
    发表于 05-29 16:11