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
some和full模式下的 10 秒均值) -
memory.low和memory.high:cgroup 级别配额(systemd-oomd 默认优先保护memory.low非零的 cgroup) - 进程所属 cgroup 的层级关系(例如
/system.slicevs/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.low:cat /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批处理实现定时关机操作详解
如何彻底卸载建站之星软件?
下一篇:git提交代码常用命令有哪些
下一篇:git提交代码常用命令有哪些


