目录
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 根本原因时,设置为
1
或2
生成内核转储文件(/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 可能导致系统完全无响应。