oom_score_adj=-1000 进程仍然被 OOM killer 选中的 systemd-oomd 规则

发布时间 - 2026-01-23 00:00:00    点击率:
会。systemd-oomd 完全忽略 oom_score_adj=-1000,仅依据 cgroup v2 的 memory.current、memory.pressure、memory.low/high 及层级关系决策,不读取任何进程级 oom_score_adj 值。

systemd-oomd 会忽略 oom_score_adj=-1000 吗?

会。systemd-oomd 是独立于内核 OOM killer 的用户态内存管理器,它不读取或尊重进程的 /proc/PID/oom_score_adj 值。即使你手动设为 -1000(内核 OOM killer 的“永不 kill”标记),systemd-oomd 仍按自己的规则决策——它只看 cgroup 内存压力、使用量、增长速率等实时指标。

systemd-oomd 的实际判定依据是什么?

它基于 cgroup v2 路径下的内存统计,核心信号包括:

  • memory.current:当前内存用量(是否超限)
  • memor

    y.pressure
    :内存压力值(尤其是 somefull 模式下的 10 秒均值)
  • memory.lowmemory.high:cgroup 级别配额(systemd-oomd 默认优先保护 memory.low 非零的 cgroup)
  • 进程所属 cgroup 的层级关系(例如 /system.slice vs /user.slice

它不会扫描所有进程,而是聚焦在压力最高、且未受 memory.low 保护的 cgroup 中选择目标。

如何让关键进程真正免于 systemd-oomd 杀死?

必须通过 cgroup 层级和资源策略干预,而非进程级 oom_score_adj

  • 将进程放入专用 cgroup(如 /mycritical.slice),并设置 MemoryLow=1G(非 0)——这会让 systemd-oomd 将其视为“受保护组”,大幅降低被选中的概率
  • 确保该 slice 的父级(如 system.slice)没有整体内存限制压制它
  • 禁用 systemd-oomd 对特定 slice 的监控(需谨慎):
    sudo systemctl set-property mycritical.slice MemoryAccounting=false(不推荐,仅临时调试用)
  • 检查 /etc/systemd/system.conf.d/oomd.conf 中是否启用了 ManageOomScoreAdj=yes —— 这个选项只影响内核 OOM killer,对 systemd-oomd 完全无效

验证当前 systemd-oomd 行为的最简方法

直接查它的日志和决策依据:

  • 看它最近 kill 了谁:journalctl -u systemd-oomd --since "1 hour ago" | grep -i "killed"
  • 查某进程所在 cgroup 的压力:cat /sys/fs/cgroup/system.slice/myapp.service/memory.pressure
  • 确认该 cgroup 是否设置了 memory.lowcat /sys/fs/cgroup/system.slice/myapp.service/memory.low(输出为 0 表示无保护)

systemd-oomd 的逻辑是“保护有 memory.low 的组,杀掉高压力且无 low 的组里的进程”,oom_score_adj 在这个流程里根本没出场机会。


# go  # app  # Property  # 自己的  # 在这个  # 尤其是  # 设为  # 将其  # 管理器  # 而非  # 只看  # 它不  # 这会 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在Ubuntu系统下快速搭建WordPress个人网站?  EditPlus 正则表达式 实战(3)  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Laravel集合Collection怎么用_Laravel集合常用函数详解  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel怎么上传文件_Laravel图片上传及存储配置  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel如何处理异常和错误?(Handler示例)  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  详解jQuery中的事件  Laravel如何使用.env文件管理环境变量?(最佳实践)  详解Huffman编码算法之Java实现  如何在橙子建站上传落地页?操作指南详解  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  JavaScript如何实现类型判断_typeof和instanceof有什么区别  EditPlus中的正则表达式 实战(2)  如何安全更换建站之星模板并保留数据?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  googleplay官方入口在哪里_Google Play官方商店快速入口指南  如何注册花生壳免费域名并搭建个人网站?  node.js报错:Cannot find module 'ejs'的解决办法  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  如何续费美橙建站之星域名及服务?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Laravel Docker环境搭建教程_Laravel Sail使用指南  nginx修改上传文件大小限制的方法  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  做企业网站制作流程,企业网站制作基本流程有哪些?  如何在阿里云购买域名并搭建网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  如何在阿里云高效完成企业建站全流程?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  Laravel如何配置Horizon来管理队列?(安装和使用)  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何在Windows服务器上快速搭建网站?  高防服务器租用如何选择配置与防御等级?  详解Android中Activity的四大启动模式实验简述  Swift中swift中的switch 语句  如何在IIS7上新建站点并设置安全权限?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  如何利用DOS批处理实现定时关机操作详解  如何彻底卸载建站之星软件?