当前位置: 首页 > news >正文

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

目录

  • `vm.panic_on_oom` 参数详解
    • 一、基本概念
    • 二、参数值及行为
    • 三、配置方法
      • 1. 临时修改(即时生效,重启失效)
      • 2. 永久修改(持续生效)
    • 四、应用场景
      • 1. 调试与故障排查
      • 2. 关键系统保护
    • 五、注意事项
      • 1. 系统可用性影响
      • 2. 磁盘空间需求
      • 3. 与其他参数配合
    • 六、故障诊断命令
      • 1. 查看 OOM 日志
      • 2. 分析内核转储
    • 七、建议配置策略
    • 八、常见问题
      • Q1:如何确认 OOM killer 是否触发?
      • Q2:如何调整 OOM 优先级?
      • Q3:如何禁用 OOM killer?

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 可能导致系统完全无响应。

http://www.lqws.cn/news/451099.html

相关文章:

  • 20250620在Ubuntu20.04.6下编译KickPi的K7的Android14系统
  • 无人机低空经济十大前沿创新应用探索-具体做无人机什么呢?优雅草卓伊凡
  • Spring---Spring MVC 执行流程
  • STM32:AS5600
  • Redis八股文
  • 快速搜索与管理PDF文档的专业工具
  • 网络核心 - CNI、Service 与 Ingress/Gateway API 解析
  • 大模型学习入门——Day3:注意力机制
  • LINUX620 NFS
  • 【2025 年】软件体系结构考试试卷-期末考试
  • 永磁电机技术革新,未来动力新方向
  • el-tree的属性render-content自定义样式不生效
  • 北京京东,看看难度
  • 探索深度学习中的图像超分辨率:SMFANet 模型解析
  • 基于OpenSSL实现AES-CBC 128算法的 SeedKey DLL的生成与使用
  • Cursor 如何快速索引代码库
  • python3列表与元组
  • 前端如何禁止用户复制?
  • Java excel坐标计算
  • macOS - 根据序列号查看机型、保障信息
  • Chromium 136 编译指南 macOS篇:获取源代码(四)
  • LabVIEW工业指针仪表检测
  • Labview教程进阶一(Labview与OPC UA设备通信)
  • 装饰器模式深度解析:Java设计模式实战指南与动态功能扩展最佳实践
  • CppCon 2017 学习:Migrating a C++03 library to C++11 case study
  • nginx的下载与安装 mac
  • 【前端隐蔽 Bug 深度剖析:SVG 组件复用中的 ID 冲突陷阱】
  • Kafka协议开发总踩坑?3步拆解二进制协议核心
  • 中文Windows系统下程序输出重定向乱码问题解决方案
  • pip install下载安装后的文件所在位置