linux systemd服务可通过oomscoreadjust设置进程oom优先级,如设为-500可显著降低被oom killer选中概率,-1000则完全免疫(root权限下);该值写入/proc/[pid]/oom_score_adj,仅作用于主进程,建议配合memorymax使用。

Linux中systemd服务可通过 OOMScoreAdjust 指令配置进程的OOM惩罚值,该值直接写入对应进程的 /proc/[pid]/oom_score_adj,影响内核OOM Killer选择时的打分权重。
在服务单元文件中设置
编辑目标服务(如 nginx.service)的覆盖配置:
sudo systemctl edit nginx.service
在打开的编辑器中添加:
[Service] OOMScoreAdjust=-500
保存后重载并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart nginx
✅ 效果:该服务主进程的 oom_score_adj 被设为 -500,显著降低被OOM Killer选中的概率;若设为 -1000,则完全免疫OOM终止(仅限 root 权限下有效)。
验证是否生效
启动服务后,查其主进程PID:
sudo systemctl show --property MainPID nginx.service
再检查对应值:
cat /proc/PID/oom_score_adj
也可批量查看所有服务进程的OOM设置:
systemctl list-units --type=service --state=running | awk '{print $1}' | xargs -I{} sh -c 'pid=$(systemctl show --value --property MainPID {} 2>/dev/null); [ -n "$pid" ] && echo "{}: $(cat /proc/$pid/oom_score_adj 2>/dev/null)"'
注意事项与常见组合
- 值范围固定为 -1000 到 +1000;-1000 表示“永不杀死”,+1000 表示“优先杀死”
- 该设置只作用于服务主进程(即
ExecStart启动的进程),不自动继承给子进程 - 若服务使用
Type=forking,需确保主进程PID识别准确,否则可能设置到错误进程 - 建议配合
MemoryMax=使用(如MemoryMax=512M),从资源上限和OOM优先级两层防护 - 避免全局设为 -1000:若多个关键服务都设为 -1000,OOM发生时内核将无法终止任何进程,可能触发
panic_on_oom=1导致系统崩溃











