一、OOM机制
OOM机制是Linux操作系统中的一个重要特性,它可以在系统内存不足时自动杀死一些进程来释放内存。这个机制的出现是为了解决系统内存管理的问题,避免资源的浪费和系统的宕机。Linux的OOM机制基于进程的OOM得分来确定哪个进程将被杀死,得分越高的进程越容易被杀死。
二、相关系统参数
在Linux系统中,有一些相关的系统参数可以用来控制OOM机制的行为,包括:
1. vm.overcommit_memory:该参数控制内存分配时系统的行为。
查看方式:cat /proc/sys/vm/overcommit_memory
vm.overcommit_memory=0时,表示内存分配时不检查系统内存是否足够,而是依靠后续的OOM killer来杀死进程。
vm.overcommit_memory=1时,永远允许进程overcommit,不会触发OOM killer。
vm.overcommit_memory=2时,永远禁止overcommit,不会触发OOM killer。
2. vm.panic_on_oom:该参数控制系统在内存不足时是否崩溃。
查看方式:cat /proc/sys/vm/panic_on_oom
vm.panic_on_oom=0:内存不足时,启动 OOM killer。
vm.panic_on_oom=1:内存不足时,有可能会触发 kernel panic,也有可能启动 OOM killer。
vm.panic_on_oom=2:内存不足时,表示强制触发 kernel panic,导致系统重启。
3. vm.oom_kill_allocating_task:该参数控制在内存不足时是否杀死正在分配内存的进程。
查看方式:cat /proc/sys/vm/oom_kill_allocating_task
vm.oom_kill_allocating_task=0时,表示系统会杀死使用得分最高的进程。
vm.oom_kill_allocating_task值为非0时,表示系统会杀死正在分配内存的进
vm.oom_kill_allocating_task:该参数控制在内存不足时是否杀死正在分配内存的进程。
4. 控制进程打分参数
查看路径: /proc/进程PID/
oom_score:内核对进程的打分,包含系统打分和用户打分。
oom_score_adj:用户打分。通过调整 oom_score_adj 的值来决定最终 oom_score 的值,oom_score_adj 的取值范围是 -1000~1000,为0时表示用户不调整 oom_score。
oom_adj:旧的接口参数,其功能类似oom_score_adj,为了兼容,目前仍然保留这个参数,当操作这个参数的时候,kernel实际上是会换算成oom_score_adj
三、使用ChaosBlade模拟OOM的表现
ChaosBlade是一种开源的混沌工程实验工具,可以用来模拟各种系统问题,包括OOM。使用ChaosBlade模拟OOM的方法如下:
1. 安装ChaosBlade。
从github下载最新版本并解压:https://github.com/chaosblade-io/chaosblade/releases
进入主路径:cd chaosblade/
确认是否安装成功:./blade v
2. 修改OOM相关系统参数
3. 执行以下命令来模拟OOM:
./blade create mem load --mem-percent 90
4. 查看系统日志是否出现了OOM
dmesg -T