`nmi_watchdog` 与 `softlockup_panic` 的区别与关系

1. 功能区别

参数作用触发条件影响
nmi_watchdog启用 NMI(不可屏蔽中断)看门狗检测 CPU 是否长时间不执行调度(软死锁)仅记录警告(默认),需配合 softlockup_panic 才会触发 panic
softlockup_panic控制 是否在检测到软死锁时触发内核 panic依赖 nmi_watchdogsoftlockup_thresh 检测到死锁直接导致系统崩溃(可被 kdump 捕获)

2. 相互关系

  • nmi_watchdog 是检测机制

    • 负责监控 CPU 是否卡在内核态过久(默认阈值 20 秒)。
    • 默认仅打印警告(kernel: watchdog: BUG: soft lockup - CPU#X stuck for 23s!)。
  • softlockup_panic 是响应行为

    • 如果 =1,则在检测到软死锁时 主动触发 kernel panic(进而触发 kdump)。
    • 如果 =0(默认),仅记录日志,系统继续运行(可能不稳定)。

3. 典型工作流程

  1. nmi_watchdog=1
    • 内核启动 NMI 看门狗,定期检查 CPU 调度状态。
  2. CPU 卡死(如内核死循环)
    • 超过阈值(/proc/sys/kernel/watchdog_thresh,默认 20 秒)后触发软死锁检测。
  3. softlockup_panic=1
    • 内核调用 panic() 触发崩溃,kdump 捕获 vmcore
  4. softlockup_panic=0
    • 仅打印日志,系统继续运行(可能导致服务不可用)。

4. 如何配置以确保捕获宕机

(1)临时生效(测试用)

# 启用 NMI 看门狗
echo 1 > /proc/sys/kernel/nmi_watchdog

# 设置检测到死锁时触发 panic
echo 1 > /proc/sys/kernel/softlockup_panic

(2)永久生效(生产环境)

# 修改 GRUB 配置
sudo vi /etc/default/grub
# 在 GRUB_CMDLINE_LINUX 中添加:
GRUB_CMDLINE_LINUX="... nmi_watchdog=1 softlockup_panic=1 ..."

# 更新 GRUB 并重启
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

(3)验证配置

# 检查 NMI 看门狗状态
cat /proc/sys/kernel/nmi_watchdog    # 应为 1
cat /proc/sys/kernel/softlockup_panic  # 应为 1

# 手动触发 panic 测试(慎用!)
echo c > /proc/sysrq-trigger

5. 常见问题

Q1:nmi_watchdog=1 但未设置 softlockup_panic,宕机会怎样?

  • 仅记录日志,不会触发 kdump,系统可能卡死或无响应。

Q2:softlockup_panic=1 但未启用 nmi_watchdog 会怎样?

  • 无效!因为检测机制(NMI 看门狗)未启用,softlockup_panic 无作用。

Q3:为什么生产环境推荐同时启用?

  • nmi_watchdog 负责 检测问题softlockup_panic 负责 主动崩溃并保存现场(便于调试)。

6. 总结

参数依赖关系生产环境建议
nmi_watchdog=1必需✅ 启用
softlockup_panic=1依赖 nmi_watchdog✅ 启用
unknown_nmi_panic=1独立(处理硬件 NMI)可选

最终结论

  • nmi_watchdog 是“检测工具”,softlockup_panic 是“应急措施”
  • 二者需配合使用,才能确保死锁时自动触发 kdump 生成 vmcore
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值