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

    文章

    10436

    浏览量

    206523
  • 服务器
    +关注

    关注

    12

    文章

    8108

    浏览量

    82485
  • 操作系统
    +关注

    关注

    37

    文章

    6279

    浏览量

    121868
  • Linux系统
    +关注

    关注

    4

    文章

    567

    浏览量

    26909
  • SWAP
    +关注

    关注

    0

    文章

    47

    浏览量

    12635
收藏 人收藏

    评论

    相关推荐

    线程是什么的基本单位 进程与线程的本质区别

    线程是操作系统中处理器调度的基本单位,它代表着独立的执行流。在一个进程中,可以包含多个线程,这些线程共享相同的进程资源,如内存空间、文件描述
    的头像 发表于 02-02 16:30 327次阅读

    线程、进程、多线程、多进程和多任务之间有何关系?

    进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源CPU时间、内存
    的头像 发表于 01-11 13:39 176次阅读
    线程、<b class='flag-5'>进程</b>、多线程、多<b class='flag-5'>进程</b>和多任务之间有何关系?

    mcu线程和进程的区别是什么

    是程序执行的基本单位,它是进程中的一个实体,是进程内的一条执行路径。线程是CPU调度的最小单位,它可以看作是轻量级的进程,不拥有独立的地址空
    的头像 发表于 01-04 10:45 261次阅读

    DshanMCU-R128s2启动与资源划分

    固件、协议栈、驱动、休眠唤醒、安全启动、安全控制 C906 应用核。运行大部分驱动与主要应用,控制台 HIFI5 算法核。运行音频相关驱动与算法 内存配置 R128 方案目前三个核 OS 运行的地址范围如下表。 这只是默认配置方案,CPU
    的头像 发表于 12-22 17:46 284次阅读
    DshanMCU-R128s2启动与<b class='flag-5'>资源</b>划分

    英伟达表示优先考虑日本对GPU的需求

    在东京首相岸田文雄官邸举行的新闻发布会上,黄强调了异常高的市场需求,他表示:“需求非常高,但我向首相保证,我们将尽最大努力优先考虑日本对 GPU 的需求”。
    发表于 12-08 10:37 145次阅读

    docker内存不足的解决办法

    内存CPU。通过这个命令,我们可以发现哪个容器占用了大量的内存资源。 调整Docker守护进程
    的头像 发表于 11-23 10:41 967次阅读

    基于FreeRTOS的STM32F103系统—内存管理及任务调度

    虽然现在的单片机系统,CPU资源并不是那么紧缺了,也有丰富的内存空间,但是我们还是要积极地实现内存管理,这可以帮我们减少
    的头像 发表于 11-13 11:08 712次阅读
    基于FreeRTOS的STM32F103系统—<b class='flag-5'>内存</b>管理及任务<b class='flag-5'>调度</b>

    什么是Linux进程调度

    片)。调度器使得我们同时执行多个程序成为可能,因此可以与具有各种需求的用户共享CPU。 内核必须提供一种方法, 在各个进程之间尽可能公平地共享CPU时间, 而同时又要
    的头像 发表于 11-09 09:05 262次阅读
    什么是Linux<b class='flag-5'>进程</b><b class='flag-5'>调度</b>器

    关于Python多进程和多线程详解

    进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。关于多进程和多线程,教科书上最经典的一句话是“进程资源分配的最小单位,线程是
    的头像 发表于 11-06 14:46 305次阅读
    关于Python多<b class='flag-5'>进程</b>和多线程详解

    用于内存系统资源分区和监控2.0平台的ACPI设计文档

    性能的系统内存资源。 MPAM表描述了系统中MSC的属性。表还描述了拓扑MSC和系统中的资源的布置。拓扑结构以系统内的资源以及MSC与其所
    发表于 08-09 06:38

    WLAN资源调度——网红餐厅的调度秘籍

    介绍了非常多构建高品质WLAN的技术。我们会通过几期展开谈谈这个话题。之前已经聊过了: 《射频资源管理——无线局域网竟然也需要红绿灯管理!?》 ,以及 《狮吼功还有一招大喇叭——覆盖增强技术》 ,今天,咱们就谈谈资源调度保障技术
    的头像 发表于 07-26 17:40 370次阅读
    WLAN<b class='flag-5'>资源</b><b class='flag-5'>调度</b>——网红餐厅的<b class='flag-5'>调度</b>秘籍

    进程和线程的区别以及优缺点

    进程与线程 1、什么是进程、线程,有什么区别? 进程资源CPU内存等)分配的基本单位,线程
    的头像 发表于 07-21 11:02 841次阅读

    程序中进程和线程的区别

    进程内存空间和系统资源。线程是调度的基本单位。 2、进程的创建和销毁 在Linux中启动一个进程
    的头像 发表于 06-22 11:39 305次阅读
    程序中<b class='flag-5'>进程</b>和线程的区别

    进程编程知识汇总

    进程是指正在运行的程序,它拥有独立的内存空间和系统资源,不同进程之间的数据不共享。进程资源分配
    发表于 06-16 11:08 235次阅读
    多<b class='flag-5'>进程</b>编程知识汇总

    Linux内核进程管理与调度:策略优化与实践分析

    一个与之相关的优先级,如果有多个可执行的进程等待CPU资源,那么具有更高优先级的进程
    发表于 05-08 09:42 595次阅读
    Linux内核<b class='flag-5'>进程</b>管理与<b class='flag-5'>调度</b>:策略优化与实践分析