SysOM FastOOM功能使用说明

FastOOM通过监控系统可用内存和swap使用率等核心内存指标,并结合CPU使用率和系统负载等辅助指标来反映内存颠簸现象。在发生一定程度内存颠簸时,FastOOM将在用户空间采取相应措施,根据灵活配置杀死相关进程,避免系统陷入OOM前的响应慢或无响应状态。

背景信息

当系统剩余内存低于阈值时,业务申请内存时将进入内存回收流程。在系统发生OOM之前,常常会出现响应慢或无响应、CPU使用率过高、高负载以及IO Wait等问题,从而导致业务波动或长时间失联。传统的Linux内核OOM机制在处理内存溢出问题时,有时由于启动过晚而导致系统进入活锁状态(内核空间不断进行页面交换和回收,进而导致系统响应缓慢或完全无响应)。此外,内核内存不足处理策略的配置灵活性不足。启用FastOOM功能可实现灵活的配置处理策略,从而有效避免系统响应慢或无响应的情况。

使用限制

  • 地域限制

    本功能目前仅支持中国内地与中国香港。

  • 操作系统限制

    架构

    操作系统

    x86架构

    • Rocky Linux 9.5

    • Rocky Linux 9.1

    • Ubuntu 20.04

    • Alibaba Cloud Linux 3 容器优化版

    • Rocky Linux 8.8

    • Ubuntu 22.04

    • Alibaba Cloud Linux 3 Pro

    • Alibaba Cloud Linux 2/3

    • CentOS 7.6及更高版本,或CentOS 8

    • Anolis OS 7/8

    • Ubuntu 24.04

    ARM架构

    • Alibaba Cloud Linux 3 Pro

    • Alibaba Cloud Linux 3

前提条件

  • 如果您使用RAM用户,请确保阿里云账号(主账号)已将系统策略AliyunECSReadOnlyAccessAliyunSysomFullAccess授予RAM用户

  • 已开通控制台权限。

    首次登录操作系统控制台时,单击开通服务以开通控制台服务。

操作步骤

说明
  • 启用、修改或关闭FastOOM功能不会对您的业务产生影响。

  • 节点级别FastOOM策略跟随自定义FastOOM功能的启用状态。

  • 在启用FastOOM功能后,您可以根据实际需求选择是否启用Pod级别FastOOM策略。

启用FastOOM

  1. 访问操作系统控制台-组件管理

  2. 为目标ECS实例安装SysOM

  3. 返回组件管理页面,单击详情

    image

  4. 单击创建配置,配置FastOOM功能。

    填写配置名称,勾选开启自定义FastOOM功能

    • 节点级别FastOOM策略

      填写配置信息,单击确定

      说明
      • 节点级别FastOOM策略在内存突发超限(超过系统总内存)申请的场景中,可能无法及时在系统OOM发生前进行干预。因此,FastOOM配置的杀进程策略无法确保所匹配的进程不被内核OOM杀死。

      • 如果不配置倾向于杀死或避免杀死进程的策略,FastOOM将采用与内核OOM相同的算法,根据进程占用的内存大小及其oom_score_adj值来选择需要杀死的进程。

      配置

      说明

      示例

      内存压力级别

      表示节点处于何种内存压力程度时,触发杀死进程。目前,分为中内存压力和高内存压力两档。中内存压力意味着FastOOM会更快介入杀死进程。

      • 离线业务,建议设置为高。

      • 时延敏感的业务,建议设置为中。

      OOM时是否杀死整个进程组

      勾选开启后FastOOM将会杀死所选进程所属进程组的所有进程。

      触发OOM时倾向于杀死的进程名

      当满足FastOOM触发杀进程条件时,优先选取杀死的进程。您可以填写正则表达式,多个正则表达式通过,隔开。

      Java,^python表示进程名中包含Java子串或以python开头的进程将被优先杀死。

      触发OOM时避免杀死的进程名

      当满足FastOOM触发杀进程的条件时,可以通过设置避免杀死特定进程,从而确保匹配的进程不会被

      FastOOM杀死。您可以填写正则表达式,多个正则表达式通过,隔开。

      .*sh$,mysql表示进程名中以sh结尾和包含mysql子串的进程不会被用户态FastOOM杀死。

    • Pod级别FastOOM策略

      单击+,填写配置信息后单击确定

      说明

      若需要创建多个Pod级别FastOOM策略,继续单击+并填写配置信息即可。

      image

      说明

      每个节点中通过Pod名称正则表达式匹配的Pod最多10个,超过10个则不会生效。

      配置

      说明

      示例

      Pod名称

      需要应用Pod级别FastOOM功能的Pod名称,可以通过填写正则表达式匹配。建议应用于常态运行,生命周期较长的Pod中。

      sysom匹配名称中包含sysom子串的Pod。

      命名空间

      需要匹配的Pod所在的命名空间。

      内存压力级别

      表示节点处于何种内存压力程度时,触发杀进程,目前分为中内存压力, 高内存压力两档。中内存压力意味着FastOOM会更快介入进行杀进程,离线业务建议设置为高,对时延敏感的业务建议设置为中。

      OOM时是否杀死整个进程组

      勾选开启后将会杀死所选进程所属进程组的所有进程。

      触发OOM时倾向于杀死的进程名

      当满足FastOOM触发杀进程条件时,在Pod中优先选取杀死的进程;可以填写正则表达式,多个正则表达式可通过,隔开。

      Java,^python表示进程名中包含Java子串或以python开头则被优先杀死。

      触发OOM时避免杀死的进程名

      当满足FastOOM触发杀进程条件时,在Pod中避免杀死的进程,设置后可以确保匹配的进程不会被FastOOM杀死;可以填写正则表达式,多个正则表达式可通过','隔开。

      .*sh$,mysql表示进程名中以sh结尾和包含mysql子串的进程不会被FastOOM杀死。

  5. 在左侧导航栏,单击系统管理

  6. 已纳管页签中勾选要应用FastOOM功能的节点,单击变更组件

  7. 选择已创建的SysOM组件配置,单击提交

修改FastOOM

  1. 访问操作系统控制台-组件管理

  2. 单击SysOM组件详情

    image

  3. 单击对应配置项操作列的修改

    image

  4. 修改配置项信息,单击确定

关闭FastOOM

  1. 访问操作系统控制台-组件管理

  2. 单击SysOM组件详情

    image

  3. 单击对应配置项操作列的修改

    image

    说明

    如果您不再需要该配置项,找到需要删除的配置项,然后在操作列单击删除,确认提示信息后单击确定。如果选择该方案,则后续步骤无需执行。

  4. 关闭FastOOM。

    • 关闭FastOOM功能

      取消勾选开启自定义FastOOM功能,单击确定

      image

    • 关闭Pod级别FastOOM功能

      单击删除,再单击确定

      image

实践案例

节点级别FastOOM解决系统OOM前抖动

问题现象

实例的内存占用在某个时间点开始迅速增加,接近系统的总内存,但尚未超过系统总内存。由于未超过系统总内存,此时不会触发内核的OOM,处于near-OOM状态。

image.png

通过操作系统控制台的系统概览可以观察到,在发生OOM事件的同时,用户态收包出现了延时,导致业务发生了抖动。

image

解决方案

开启节点级别的FastOOM功能,由于是较为敏感的业务,内存压力选择中。设置触发OOM时避免杀死的进程名,同时设置无关的日志程序优先杀死。

image

您可以通过操作系统控制台的系统概览功能查看FastOOM介入相关记录,如下图所示。

image

由于kube-rbac-proxynode_exporter等进程oom_score_adj被设置为接近999,FastOOM会匹配内核策略优先杀死这些进程,然而,杀死这些进程后释放的内存量较少,系统仍然处于near-OOM状态。FastOOM杀死了配置优先杀死的logcollect进程,避免系统进入near-OOM的抖动状态。

Pod级别FastOOM杀死进程策略

问题现象

内核提供了唯一接口/proc/<PID>/oom_score_adj来控制内核OOM Killer选取杀死进程的策略。若设置为-1000,表示不会被OOM Killer;若设置为1000,表示优先杀死该进程。在Kubernetes环境中,如果要控制Pod中运行多个业务场景的OOM策略,需要修改Pod中特定进程的oom_score_adj,对于短生命周期的守护进程,修改oom_score_adj的难度较高。

解决方案

开启Pod级别的FastOOM功能,可以灵活的配置Pod容器中发生OOM时避免和优先杀死的进程。

  1. 例如,在集群中,通过名为test-alinuxDaemonSet,在每个节点上部署了相应的Pod。

    image.png

  2. 设置Pod级别FastOOM策略。

    • 为了匹配相应的Pod,Pod名称应填写为test-alinux(正则表达式将匹配在不同节点上的test-alinux-xxxPod),命名空间设置为default。

    • 控制OOM时杀进程策略,将内存压力级别设置为高,触发用户态OOM的时机接近于内核OOM的时机。

    • 配置优先杀死特定进程和避免杀死业务进程和Pod中的1号进程,从而避免Pod重启或影响业务。

    image

  3. 配置下发到对应节点后,当Pod中容器内存使用超过容器的限制后发生OOM。您可以通过操作系统控制台的系统概览功能查看FastOOM介入相关记录,如下图所示。

    image.png