赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 云服务器 ECS
  4. 实践教程
  5. 稳定性最佳实践
  6. 故障演练
  7. 内存溢出(OOM)演练

内存溢出(OOM)演练

  • 故障演练
  • 发布于 2025-04-01
  • 0 次阅读
文档编辑
文档编辑

通过注入进程不断消耗内存,模拟云服务器ECS发生OOM(即内存溢出)情况,测试业务进程是否会被终止、检测系统恢复能力、验证监控和告警机制的有效性等,并基于演练结果制定应对策略,确保生产环境发生OOM时系统能够迅速恢复正常运行,降低业务中断风险。

什么是OOM和OOM Killer?

OOM(Out Of Memory)指在操作系统中出现可用内存不足,无法满足进程的内存申请需求的场景,可能会导致进程、系统不稳定。为应对此场景,Linux操作系统通过OOM Killer内核机制对各个进程评分(oom_score),优先终止优先级低,内存占用多的进程以释放内存,防止因系统内存耗尽而触发不可控的业务和系统崩溃。

实现原理

本方案使用云助手插件ACS-ECS-HighMemory,注入前计算需要分配的内存大小,然后启动trigger_oom注入进程,并以一定速率消耗内存,直至达到目标内存占用。发生OOM时,操作系统根据进程评分选择终止的进程,该评分由进程占用内存大小和该进程的oom_score_adj计算所得。因此,在故障注入时可以调整注入进程的oom_score_adj参数,使操作系统在OOM发生时选择终止业务进程或注入进程。oom_score_adj参数取值范围-1000到1000,默认值为0,值越高该进程越容易被终止,为-1000时表示禁止OOM Killer终止该进程。

使用指南

演练准备

请确保您的ECS实例已安装云助手Agent,并且云助手状态为正常。具体操作,请参见查看云助手状态及异常状态处理。

故障注入

  1. 登录ECS实例。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。

  2. 使用具有sudo访问权限的用户,运行云助手插件ACS-ECS-HighMemory。

    sudo acs-plugin-manager --exec --plugin ACS-ECS-HighMemory --params inject,[score=paramA],[percent=paramB],[rate=paramC],[duartion=paramD]

    []内为可选故障注入参数,参数说明:

    • score(可选):用于设置注入进程的oom_score_adj取值范围为 -1000到1000,通过设置该参数选择在OOM发生时终止注入进程或业务进程。若需终止业务进程,请为注入进程设置一个负值,如-100,如业务进程未被终止,请调小score值。

    • percent(可选):系统总内存目标占用大小,不填该参数时默认触发OOM。

    • rate(可选):内存占用速率,单位为MB/s,默认为0表示无限制。

    • duartion(可选):达到目标占用内存后的持续时间,单位为秒,超时自动释放内存,默认为300(秒)。

  3. 检查故障注入是否成功。

    • 未发生OOM场景:

      • 执行top命令,系统已使用内存达到目标使用率,说明故障注入成功。

      • 在控制台实例监控或云监控中,若内存使用率达到目标使用率,说明故障注入成功。

        image

    • OOM场景:在系统日志中搜索与Out of memory相关的日志。

      dmesg -T | grep "Out of memory" 

      如下所示,表示ECS实例中已发生OOM,说明故障注入成功。并判断终止的进程是否为目标进程,如未杀死目标进程可调整score参数。

      image

故障恢复

如指定目标内存使用率,您可以使用以下方式,移除注入的故障。

  • 方法一(推荐):在ECS实例中执行故障恢复命令,查看内存使用率是否下降到故障注入前的水平。

    sudo acs-plugin-manager --exec --plugin ACS-ECS-HighMemory --params recover
  • 方法二:等待超时自动释放故障,系统默认在达到设置的内存使用率后,持续300秒后自动释放内存。

未指定目标内存使用率,会触发OOM场景,一般系统会自动恢复。建议对ECS执行重启,防止非预期的进程被意外终止。

演练案例

  1. 故障注入,预期占用90%内存,速率20 MB/s,持续时间120s。

    sudo acs-plugin-manager --exec --plugin ACS-ECS-HighMemory --params inject,percent=90,rate=20,duartion=120

    回显类似如下所示时,说明故障注入成功。

    image

  2. 查看注入效果。

    使用top命令查看

    1. 执行top命令后,按M键按内存占用大小排序,然后按m键显示内存占用进度条。

      可以看到当前内存使用率为90.2%,注入进程trigger_oom占用内存84.4%。

      image

    2. 超时后,系统自动释放内存。内存回到演练前水平,注入进程退出。

      image

    在控制台实例详情监控查看

    image

    查看控制台实例详情,监控中的内存使用率图表,系统的内存使用率在注入后内存以一定速率上升,随后到达目标内存90%,持续120秒后内存使用率跌至注入前水平,演练恢复。

常见的OOM原因及解决方案

  • 内存占用较高会出现系统卡顿、内部服务响应速度变慢,您可以排查并分析内存过高原因并解决。具体操作,请参见如何处理Linux系统内存使用率过高问题?。

  • 出现OOM可能是因为实例本身可使用的内存太少或某一个资源被频繁申请导致系统资源耗尽等,您可以分析OOM出现的原因并解决。具体操作,请参见如何处理Linux实例中的OOM问题?。

相关文章

CPU利用率高演练 2025-04-01 11:57

CPU利用率是衡量业务系统是否健康的一个重要指标,为使业务达到足够的稳定性,CPU利用率需保持在合理的范围内。过高的CPU利用率会导致业务延迟甚至中断。通过注入高CPU故障,可以测试业务系统在特定CPU负载时的反应、检测系统恢复能力、验证监控和告警机制的有效性等,并基于演练结果制定应对策略,确保生产

内存溢出(OOM)演练 2025-04-01 11:57

通过注入进程不断消耗内存,模拟云服务器ECS发生OOM(即内存溢出)情况,测试业务进程是否会被终止、检测系统恢复能力、验证监控和告警机制的有效性等,并基于演练结果制定应对策略,确保生产环境发生OOM时系统能够迅速恢复正常运行,降低业务中断风险。 什么是OOM和OOM Killer?

宕机演练 2025-04-01 11:57

服务器宕机是一种常见的故障现象,其根源来自于软件和硬件上发生的异常,且几乎无法避免。通过模拟内核故障造成的ECS宕机,可以测试业务系统在宕机时的反应、检测系统恢复能力、验证监控和告警机制的有效性等,并基于演练结果制定应对策略,确保生产环境发生宕机时系统能够迅速恢复正常运行,降低业务中断风险。 实现原

网络丢包演练 2025-04-01 11:57

网络丢包是一种常见的网络故障,网络拥塞、网络硬件故障、网络链路干扰等情况都可能会造成网络丢包,通过此演练场景验证系统在网络丢包时的告警和恢复情况。 使用限制 该演练场景需要使用tc(Traffic Control)工具及其依赖的内核netem组件。

PID资源不足演练 2025-04-01 11:57

在操作系统中,PID(Process Identifier)是用于唯一标识进程的数字,可以在进程释放后被重复利用。虽然很难将PID资源耗尽,但仍存在意外耗尽的情况,导致新进程无法创建,可能会导致业务挂起,从而影响业务能力。因此,有必要模拟PID资源耗尽或主动模拟业务挂起的情况,以检测业务的高可用能力

磁盘IO Hang演练 2025-04-01 11:57

IO Hang是指在进行读或写操作时,系统因为某些原因无法完成这些操作,导致进程或系统无法继续正常工作的一种情况。其可以由多种原因引起,包括硬件故障、驱动问题、文件系统错误、网络延迟或拥塞等。这对业务产生性能下降,服务延迟,数据一致性问题等风险。通过此演练场景验证系统在磁盘发生IO Hang时的告警

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号