0

0

systemd-oomd 杀进程时优先级不生效或杀错的配置经验

舞夢輝影

舞夢輝影

发布时间:2026-01-22 18:58:03

|

267人浏览过

|

来源于php中文网

原创

systemd-oomd 杀错进程主因是配置未对齐内核行为、cgroup层级混乱或规则覆盖不全;需确保oom_score_adj写入生效、避免子进程继承失效、统一cgroup层级设置,并验证路径匹配、规则加载及PSI压力指标。

systemd-oomd 杀进程时优先级不生效或杀错的配置经验

systemd-oomd 杀进程时优先级不生效或杀错,通常不是“随机误杀”,而是配置未对齐内核行为、cgroup 层级混乱、或规则覆盖不完整导致的。关键不在调高/降低数值,而在让 oom_score_adj 和 cgroup 策略真正被识别并执行。

确认 oom_score_adj 是否真正写入生效

很多情况下服务看似设置了 OOMScoreAdjust=-500,但实际未生效,常见原因:

  • 服务未重启:修改 systemd unit 后必须执行 sudo systemctl daemon-reload && sudo systemctl restart xxx.service,仅 reload 不触发重载 oom_score_adj
  • 子进程继承失效:若主进程 fork 出新进程(如 Java 应用启动多个 JVM 子进程),默认不继承父进程的 oom_score_adj;需在 service 文件中显式加 OOMScoreAdjust=-500 并配合 ProtectProc=no(谨慎启用)和 RestrictSUIDSGID=no(如需)
  • 被更高层级 cgroup 覆盖:例如服务运行在 workload.slice 下,而该 slice 自身设置了 OOMScoreAdjust=0,会覆盖子 service 的设置;应统一在 slice 或 service 级别设值,避免嵌套冲突

检查 cgroup v2 + systemd-oomd 的策略边界

Ubuntu 22.04+ 默认启用 systemd-oomd(非传统 OOM Killer),它依赖 PSI(Pressure Stall Information)和 cgroup v2 路径匹配。优先级配置容易失效,往往因为:

Krea AI
Krea AI

多功能的一站式AI图像生成和编辑平台

下载
  • 路径匹配失败:oomd 规则中的 cgroup 字段必须严格匹配实际路径,例如 workload.slice/myapp.serviceworkload.slice/myapp.service/(末尾斜杠影响通配符解析)
  • 规则未启用或加载失败:运行 systemctl status systemd-oomd 查看日志,确认是否报 Failed to load rulesetNo matching cgroups found
  • ManagedOOMSwap 设置干扰判断:旧版 Ubuntu 默认 ManagedOOMSwap=kill,会导致 oomd 过早基于 swap 使用率触发 kill;建议改为 ManagedOOMSwap=auto(已在 22.04 后期版本默认)

验证与调试真实 OOM 决策链

不要只看配置,要验证内核和 oomd 实际看到什么:

  • 查进程当前得分:cat /proc/PID/oom_score_adj(确认是 -500 而非 0)
  • 查 cgroup 所属:cat /proc/PID/cgroup,确认它落在你配置的 slice 或 service 下
  • 模拟内存压力测试后,立即查日志:journalctl -u systemd-oomd --since "1 hour ago" -n 50,找类似 Killing PID XXX (myapp) in cgroup workload.slice/myapp.service: memory.pressure high 的记录
  • 对比 ps -eo pid,comm,pmem,vsz,rss --sort=-rss | head -10 和 oomd 日志中被杀进程,确认是否真按内存占用排序——若不是,说明 oom_score_adj 或 cgroup 隔离已起作用

规避“杀错”的实战配置习惯

经验表明,以下做法能显著减少误杀:

  • 核心服务(如 sshd、journald)固定使用 -.slicesystem.slice,并全局禁用其 oomd 监控:sudo systemctl set-property sshd.service ManagedOOM=false
  • 业务服务统一部署在自定义 slice(如 app.slice),并在 slice 级设置 MemoryMax= + OOMScoreAdjust=,比单个 service 更易管控
  • 为临时任务(如日志清理脚本)显式设置 OOMScoreAdjust=800 + MemoryMax=100M,主动标记“可牺牲”,避免挤占关键服务资源位
  • 禁用 swap 时务必谨慎:无 swap 会使系统失去缓冲窗口,oomd 可能来不及响应就直接触发 kernel OOM Killer,反而绕过所有 systemd 配置

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

409

2023.09.04

常见的linux系统有哪些
常见的linux系统有哪些

linux系统有Ubuntu、Fedora、CentOS、Debian、openSUSE、Arch Linux、Gentoo、Slackware、Linux Mint、Kali Linux。更多关于linux系统的文章详情请阅读本专题下面的文章。php中文网欢迎大家前来学习。

855

2023.10.27

ubunt上安装和配置vnc
ubunt上安装和配置vnc

安装方法:安装VNC服务器、启动VNC服务器、设置VNC密码等等。想了解更多ubuntu的相关内容,可以阅读本专题下面的文章。

428

2023.12.28

ubuntu启动黑屏解决方法
ubuntu启动黑屏解决方法

ubuntu启动黑屏解决方法:检查是否是电源问题、检查内存是否接触不良、检查显卡问题等。想了解更多ubuntu的相关内容,可以阅读本专题下面的文章。

673

2023.12.28

为什么ubuntu有网络连接但不能上网
为什么ubuntu有网络连接但不能上网

ubuntu有网络连接但不能上网的原因:1、dns配置问题;2、代理服务器设置问题;3、网络防火墙设置问题;4、路由器或调制解调器设置问题;5、网络驱动程序问题;6、网络配置文件问题;7、其他问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

478

2024.09.05

ubuntu安装golang
ubuntu安装golang

本专题整合了ubuntu安装golang所有方法汇总,阅读下面的文章了解更多详细操作。

111

2025.12.13

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.2万人学习

Java 教程
Java 教程

共578课时 | 81万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号