首页/系统/Linux 内核与性能调优速查/vm.panic_on_oom OOM 时是否崩溃
sysctl 内核参数72 条

vm.panic_on_oom OOM 时是否崩溃

控制内存耗尽时内核行为:默认调起 OOM killer 杀进程,或配置为直接 panic(配合自动重启变成整机重启)。

OOM 时是否崩溃

vm.panic_on_oom 决定物理内存耗尽时内核的处置方式:默认值 0 启用内存不足杀手,由它挑选并终止一个进程来释放内存,系统本身继续运行;设为 1 则直接让内核崩溃,配合 kernel.panic 的自动重启就变成整机重启。取值 2 只在特定约束场景下触发崩溃。选择哪种行为,本质是在「牺牲一个进程保住系统」和「重启整机避免状态不确定」之间做取舍。

基本信息

参数vm.panic_on_oom
取值0 启用内存不足杀手(默认) / 1 内存耗尽时崩溃 / 2 特定约束场景下崩溃
排查入口dmesg 中的内存不足记录与被终止进程信息
配套参数kernel.panic 决定崩溃后多久自动重启
进程保护可通过评分调整参数降低关键进程被选中的概率
适用建议常规业务保持默认,无人值守设备可评估崩溃重启策略

典型使用场景

  • 排查服务被杀死:确认是内存不足杀手所为而非进程崩溃
  • 定位内存消耗方:从内核记录中还原当时的内存分布与牺牲进程
  • 保护关键进程:通过评分调整降低核心服务被优先选中的概率
  • 无人值守环境:评估崩溃自动重启与业务可用性的取舍
  • 容量排查:反复出现内存不足说明存在泄漏或配置不合理

查看与排查

查看与排查
sysctl vm.panic_on_oom                       # 读当前策略
dmesg -T | grep -i -E 'oom|killed process' | tail -20   # 查看内存不足记录
journalctl -k | grep -i oom | tail            # systemd 系统上的等价查法
sysctl kernel.panic                           # 崩溃后的重启行为
cat /proc/<pid>/oom_score 2>/dev/null         # 单进程被选中的评分
ps -eo pid,rss,comm --sort=-rss | head        # 内存占用排行

取值与后果

取值行为适用与代价
0终止一个进程释放内存通用默认,系统继续提供服务
1内核崩溃,可能重启整机无人值守设备可用,会丢失所有内存中的现场
2特定约束场景下崩溃仅在特定内存约束条件下生效,需查内核文档
评分调整降低指定进程被选中的概率保护关键进程,但不能替代容量治理
设为 1 后内存耗尽会导致整机不可用;如果同时配置了崩溃自动重启,表现就是节点不定期重启,业务会承受比终止单个进程更长的中断时间。启用前必须确认可用性策略与现场采集手段。
排查内存不足问题一定要看内核记录的完整段落:里面包含内存分布、进程内存占用与最终被终止的进程。只看监控告警会漏掉根因,也无法判断是应用泄漏还是整体容量不足。

易错点

  • 只看监控告警不查内核记录:缺少内存分布与被牺牲进程的信息,无法定位根因
  • 为保护关键进程直接关闭内存不足处置:系统失去兜底机制,后果更严重
  • 在生产环境设为崩溃:节点不定期重启,中断时间远超终止单个进程
  • 把反复触发内存不足当作偶发事件:通常说明存在泄漏或容量配置不合理
  • 忽略日志收集进程容易被选中:需要单独评估其内存与优先级配置

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/vm.rst
  • man 5 proc(oom_score)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌