OOM诊断功能最佳实践

通过OOM(Out Of Memory)内存诊断功能,对操作系统发生OOM的原因进行分析和界定。本文介绍了OOM诊断功能的使用说明。

使用限制

  • 地域限制

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

  • 操作系统限制

    架构

    操作系统

    x86架构

    • Alibaba Cloud Linux 2/3

    • CentOS 7.6及以上版本

    • Anolis 8.4以上版本

    ARM架构

    Alibaba Cloud Linux 3

使用场景

场景

说明

系统全局内存不足

整个主机的内存使用过量,导致系统内存不足,从而触发了OOM。

cgroup内存使用超限

在指定的cgroup下,进程的内存使用超过了设定限制,导致该cgroup整体的内存使用达到上限,从而触发了OOM。

父级cgroup内存使用超限

父cgroup下的进程内存使用超标,导致父cgroup整体内存使用达到限制,从而触发了OOM。在终止进程时,系统选择了子cgroup下的进程执行终止操作。

内存节点的内存不足

在NUMA存储模式下,操作系统可能具有多个内存节点(可通过执行cat /proc/buddyinfo命令来查看相关资源信息)。如果通过cpuset.mems参数指定cgroup仅能够使用特定内存节点的内存,则可能会导致实例在具备充足空闲内存的情况下,仍然出现OOM Killer的情况。

共享内存过度使用导致cgroup内存使用超限

在cgroup内存使用超限的情况下,进一步发现cgroup下的共享内存使用已超过总的cgroup用户态内存的30%。因此,可以认为造成OOM的主要原因是共享内存的过量使用,需要进一步分析共享内存的主要占用者。

前提条件

操作步骤

  1. 登录操作系统控制台

  2. 为目标ECS实例安装SysOM。具体操作,请参见安装组件

  3. 在左侧导航栏,单击系统诊断

  4. 在页面左侧顶部,选择目标实例所在的地域。

    image

  5. 诊断类型列表中,选择内存诊断,在诊断项列表中,选择OOM诊断,配置相关参数,单击执行诊断

    相关参数如下:

    参数名

    参数说明

    是否必填

    实例ID

    目标ECS实例ID。

    OOM发生的时间

    • 选择时间:将会对距离目标时间最近的一次OOM进行分析。

    • 不指定时间:对当前系统最后一次发生的OOM进行分析。

  6. 诊断记录区域,单击查看报告

    image