当前位置: 首页 > article >正文

【linux】cgroup配置在机器OOM时选择进程原理讲解

引言

之前的章节讲了cgroup的配置去合理的使用机器的内存,总有意外如果系统内存不足时,触发OOM时候是如何选择进程是很值得研究的。

在 Linux 系统中,oom_score, oom_adj, 和 oom_score_adj 都与内存不足(OOM,Out Of Memory)时的进程选择逻辑有关。它们之间有一些联系,但各自的作用不同。让我们逐一讲解这些参数,以及它们之间的关系。

oom_score

oom_score 是一个表示进程在 OOM 情况下被终止的概率的分数,系统会根据这个分数来决定哪些进程应该被杀死。oom_score 的计算方式是基于进程的内存占用(即虚拟内存)和其 oom_adj 或 oom_score_adj 设置。

oom_score 的范围:oom_score 的值通常是一个 0 到 1000 之间的数值。值越高,表示该进程在内存不足时越可能被杀死。
计算方式:

oom_score = (oom_score_adj + 1000) * (total_vm / total_vm_for_all_processes)

其中:
oom_score_adj 是一个可调的值,用于调整进程在 OOM 时被选择的优先级。
total_vm 是进程使用的虚拟内存大小。
total_vm_for_all_processes 是所有进程的虚拟内存总和。

oom_adj

oom_adj 是一个历史上用于调整进程在 OOM 时被杀死的优先级的参数。oom_adj 的值影响进程的 OOM 分数(oom_score)。

oom_adj 的取值范围:oom_adj 的值范围是从 -17 到 15。

oom_adj = -17:进程几乎不可能被 OOM 杀死。
oom_adj = 15:进程最可能被 OOM 杀死。
oom_adj = 0:表示该进程的 OOM 优先级取决于其他因素,默认设置。
影响: oom_adj 直接影响进程的 OOM 被杀死的概率。它控制了 oom_score 的计算,数值越高,进程的 oom_score 越高,被杀死的概率越大。

例如,oom_adj 值为 15 时,进程的 oom_score 值会增加,意味着它在 OOM 发生时更容易被内核杀死。

oom_score_adj

oom_score_adj 是一个更加精细化的调整参数,取代了之前的 oom_adj,它的作用是直接调整进程的 oom_score。这个参数可以在用户空间进行调整,因此更灵活。

oom_score_adj 的取值范围:oom_score_adj 的取值范围是从 -1000 到 1000。

  • oom_score_adj = -1000:进程几乎不可能被 OOM 杀死。
  • oom_score_adj = 1000:进程最有可能被 OOM 杀死。
  • oom_score_adj = 0:表示没有特别的调整,oom_score 的计算只依赖于内核的默认策略。

影响: oom_score_adj 直接影响 oom_score,并且比 oom_adj 更为细致。其数值与 oom_score 的计算公式密切相关,允许用户根据需求精细地控制进程在内存不足时被终止的可能性。

oom_score_adj 的数值影响:

  • oom_score_adj = 0 表示进程的 OOM 分数不受任何调整,按照进程的内存占用和内核默认策略来计算。

  • oom_score_adj = 1000 表示该进程会被视为优先杀死的对象,可能被内核终止。

  • oom_score_adj = -1000 则表示该进程几乎不可能被杀死,通常用于保护关键进程。

总结

参数作用取值范围影响
oom_score表示进程在 OOM 时被杀死的概率,数值越高,越可能被杀死。0 到 1000根据 oom_adj 和 oom_score_adj 计算得出。
oom_adj影响进程的 OOM 优先级,数值越高,进程越容易被 OOM 杀死。-17 到 15直接影响 oom_score,但 oom_score_adj 更常用。
oom_score_adj直接调整进程的 OOM 分数(oom_score),用于精细控制。-1000 到 1000通过调整进程的 oom_score,影响进程的 OOM 杀死概率。

使用场景

  • oom_score:用于系统级别的 OOM 处理,内核依据 oom_score 决定杀死哪个进程。

  • oom_adj:早期的 OOM 调整方法,通常被 oom_score_adj 替代。oom_adj 用于控制进程的 OOM 选择优先级,但现在较少直接使用。

  • oom_score_adj:现在常用的调整进程 OOM 优先级的方法,提供了比 oom_adj 更精细的控制。

操作示例

查看进程的 oom_score_adj:

cat /proc/<pid>/oom_score_adj

修改进程的 oom_score_adj:

echo <value> > /proc/<pid>/oom_score_adj

其中 是所需的值(范围 -1000 到 1000)。

这些机制可以帮助系统管理员对关键进程进行保护,或在高负载条件下优化 OOM 处理策略。


http://www.kler.cn/a/428286.html

相关文章:

  • 从规则到神经网络:机器翻译技术的演进与未来展望
  • 代码随想录算法训练营day31(补0124)
  • 万字长文总结前端开发知识---JavaScriptVue3Axios
  • 0164__【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os
  • Windows中本地组策略编辑器gpedit.msc打不开/微软远程桌面无法复制粘贴
  • 32、【OS】【Nuttx】OSTest分析(1):stdio测试(二)
  • 视频监控中使用usb摄像头(MJPG)代替OV5640
  • Shell 流程控制
  • python中什么叫做脚本
  • 前端下载文件后,文件损坏,无法打开?
  • 05 在 Linux 使用 AXI DMA
  • 【模电】【补充】稳幅电路分析
  • 集合ArrayList
  • 基于Spring Boot和Vue的人脸识别项目(源码)
  • 重生之我在21世纪学C++—循环语句
  • 分布式数据库(一)
  • linux安装nodejs管理器,并配置node、npm 软链接
  • 2025台球展(壹肆柒·中国国际台球产业博览会)3月举办
  • 深入理解 Spring MVC 中的 @RequestBody 注解
  • 免费下载 | 2024数据资源入表年度发展报告
  • 400G智算网络助力知名自动驾驶企业算力训练提效
  • 关于springBoot+vue项目中配置SSL证书问题
  • JavaScrip面向对象-构造器和对象原型
  • Java使用Word模板导出PDF及PDF盖章
  • CSRF跨站请求伪造
  • IDEA关联Tomcat服务启动教程及普通JavaEE工程到Maven和Web工程启动的教程