Kernel soft lockup 排查:识别长时间占用 CPU 的内核路径

从内核日志、堆栈和系统压力判断 soft lockup 的触发源,并给出生产环境的稳妥处置顺序。

文章目录 · 4 节

watchdog: BUG: soft lockup 表示某个 CPU 长时间没有让出执行权。它可能来自内核缺陷、驱动、中断风暴或极端资源压力,不能仅靠提高 watchdog 阈值解决。

保留现场证据

journalctl -k --since '-30 min'
dmesg -T | grep -A20 -B5 -i 'soft lockup'
cat /proc/interrupts
cat /proc/pressure/cpu

记录受影响 CPU、重复出现的内核函数、内核版本和最近变更。若多次堆栈都指向同一驱动或模块,优先检查对应版本的已知问题。

关联资源与硬件

mpstat -P ALL 1
perf top -a
ethtool -S eth0 | grep -Ei 'drop|miss|error'

中断集中、包速率突增或存储超时都可能触发长内核路径。虚拟机还需结合宿主机 steal time 和云平台事件判断。

处置原则

  • 节点仍响应时先隔离流量并采集日志
  • 避免在未知状态下连续执行 SysRq 或强制转储
  • 对比内核、驱动和固件升级前后的变化
  • 只在确认误报后调整 watchdog_thresh

收尾清单

将堆栈、硬件信息、负载曲线和变更记录放入事件报告。修复后做相同压力复测,并观察是否还有 RCU stall、hung task 或机器检查异常。