1. 功能区别
参数 | 作用 | 触发条件 | 影响 |
---|
nmi_watchdog | 启用 NMI(不可屏蔽中断)看门狗 | 检测 CPU 是否长时间不执行调度(软死锁) | 仅记录警告(默认),需配合 softlockup_panic 才会触发 panic |
softlockup_panic | 控制 是否在检测到软死锁时触发内核 panic | 依赖 nmi_watchdog 或 softlockup_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. 典型工作流程
nmi_watchdog=1
- 内核启动 NMI 看门狗,定期检查 CPU 调度状态。
- CPU 卡死(如内核死循环)
- 超过阈值(
/proc/sys/kernel/watchdog_thresh
,默认 20 秒)后触发软死锁检测。
softlockup_panic=1
时
- 内核调用
panic()
触发崩溃,kdump 捕获 vmcore
。
softlockup_panic=0
时
4. 如何配置以确保捕获宕机
(1)临时生效(测试用)
echo 1 > /proc/sys/kernel/nmi_watchdog
echo 1 > /proc/sys/kernel/softlockup_panic
(2)永久生效(生产环境)
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="... nmi_watchdog=1 softlockup_panic=1 ..."
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
(3)验证配置
cat /proc/sys/kernel/nmi_watchdog
cat /proc/sys/kernel/softlockup_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
。