【内存】Linux 内核优化实战 - vm.panic_on_oom

发布于:2025-06-24 ⋅ 阅读:(17) ⋅ 点赞:(0)

vm.panic_on_oom 参数详解

一、基本概念

  • OOM(Out of Memory):当系统物理内存和交换空间耗尽,无法满足新的内存分配请求时触发。
  • 参数作用:控制 Linux 内核在 OOM 时的行为策略,决定是否让系统崩溃(panic)或执行 OOM killer。

二、参数值及行为

行为描述
0 默认值。启用 OOM killer,内核选择并终止一个或多个进程释放内存。
1 直接触发内核 panic,生成核心转储(core dump)并重启系统。
2 先尝试 OOM killer,若失败则触发 panic(推荐调试场景使用)。

三、配置方法

1. 临时修改(即时生效,重启失效)

# 设置为 panic 模式
sysctl -w vm.panic_on_oom=1

# 查看当前值
sysctl vm.panic_on_oom

2. 永久修改(持续生效)

编辑 /etc/sysctl.conf

# 添加或修改此行
vm.panic_on_oom = 1

使配置生效:

sysctl -p

四、应用场景

1. 调试与故障排查

  • 当需要分析 OOM 根本原因时,设置为 12 生成内核转储文件(/var/crash)。
  • 通过 crash 工具分析转储文件,定位内存泄漏或异常内存使用。

2. 关键系统保护

  • 在不能容忍进程被随机终止的场景(如数据库、实时系统),可配置为 1 强制重启。

五、注意事项

1. 系统可用性影响

  • 设置为 1 可能导致服务中断,建议仅在非生产环境或高可用架构中使用。

2. 磁盘空间需求

  • 内核转储文件可能占用大量磁盘空间,确保 /var/crash 分区有足够空间。

3. 与其他参数配合

参数 作用
vm.oom_killer 全局禁用/启用 OOM killer(0 禁用,1 启用)
vm.overcommit_memory 控制内存过度承诺策略(0/1/2)

六、故障诊断命令

1. 查看 OOM 日志

dmesg | grep -i oom
journalctl -k | grep -i oom

2. 分析内核转储

# 安装 crash 工具
yum install crash

# 分析转储文件
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/vmcore

七、建议配置策略

环境 推荐值 理由
开发/测试 2 优先尝试 OOM killer,保留 panic 机制获取完整崩溃信息。
生产环境 0 默认策略,避免系统崩溃导致的服务中断。
关键服务 1 牺牲可用性换取数据一致性(如数据库崩溃比数据损坏更易恢复)。

八、常见问题

Q1:如何确认 OOM killer 是否触发?

grep -i 'killed process' /var/log/messages

Q2:如何调整 OOM 优先级?

通过 /proc/<pid>/oom_score_adj 文件调整进程被 OOM killer 选中的优先级(范围:-1000 到 1000)。

Q3:如何禁用 OOM killer?

sysctl -w vm.oom_killer=0

警告:禁用 OOM killer 可能导致系统完全无响应。


网站公告

今日签到

点亮在社区的每一天
去签到