硬锁检测看门狗
内核利用处理器的性能计数器定期产生非屏蔽中断,用来检测硬锁:某个处理器长时间被独占,连普通的定时器中断都得不到响应的情况。它同时也是部分采样能力的来源。虚拟化环境通常不具备这个能力,读值为 0 属于环境特性,而不是故障信号。
基本信息
| 适用平台 | Linux 内核参数(物理机与虚拟化环境表现不同) |
|---|---|
| 参数名 | kernel.nmi_watchdog |
| 取值 | 0 关闭,1 开启 |
| 常见默认 | 多数物理机默认开启 |
| 虚拟化环境 | 通常不可用,读值为 0 属正常 |
典型使用场景
- 确认物理机是否具备硬锁检测能力,排查偶发长时间无响应。
- 核对采样能力受限的原因,判断是环境特性还是配置问题。
- 云主机上确认读值为 0 属于正常现象,避免误判为故障。
- 评估关闭它能节省多少开销,以及会失去什么能力。
- 与采样工具配合,理解不同环境下可用观测手段的差异。
查看与调整
查看与调整
sysctl kernel.nmi_watchdog # 查看当前取值
cat /proc/sys/kernel/nmi_watchdog # 与上一行对照
sysctl -w kernel.nmi_watchdog=0 # 临时关闭,重启后恢复
grep -i nmi /var/log/messages | tail -5 # 是否出现过硬锁相关告警
dmesg | grep -i watchdog | tail -5 # 确认看门狗初始化情况
ls /proc/sys/kernel/ | grep nmi # 确认该参数是否存在取值与环境
| 取值与场景 | 含义 | 判读 |
|---|---|---|
| 物理机取值为 1 | 硬锁检测生效 | 具备检测与部分采样能力 |
| 物理机取值为 0 | 被显式关闭或硬件不支持 | 确认是否有人改过 |
| 虚拟机上为 0 | 环境不具备该能力 | 正常现象,不必处理 |
关闭它带来的开销收益通常有限,但会同时失去硬锁诊断能力与依赖它的部分采样手段;在没有明确收益前保持默认更稳妥。
遇到系统长时间无响应的现象时,这个参数只是排查线索之一:虚拟化环境里读值为 0 意味着缺少这条线索,需要转向其它手段(如内核日志与外部监控)判断。