searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

OOM机制以及模拟方法

2023-06-21 03:02:20
149
0

一、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

0条评论
0 / 1000
xinjiefeng
8文章数
0粉丝数
xinjiefeng
8 文章 | 0 粉丝
原创

OOM机制以及模拟方法

2023-06-21 03:02:20
149
0

一、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

文章来自个人专栏
操作系统内存管理
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0