服务器卡死别慌!手把手教你读懂NMI watchdog的soft lockup报错信息(附CentOS 7排查流程)

张开发
2026/5/13 0:46:52 15 分钟阅读

分享文章

服务器卡死别慌!手把手教你读懂NMI watchdog的soft lockup报错信息(附CentOS 7排查流程)
服务器卡死应急指南NMI watchdog与soft lockup实战排查手册凌晨三点机房告警铃声大作监控大屏上某台核心服务器的CPU使用率突然飙升至100%并持续不降。登录系统后dmesg中赫然出现NMI watchdog: BUG: soft lockup - CPU#2 stuck for 23s!的红色警告——这是每个运维工程师都可能遭遇的噩梦场景。本文将从实战角度带你拆解这类故障的标准排查流程让你在关键时刻能像资深专家一样快速定位问题根源。1. 紧急响应看到soft lockup报错的第一反应当soft lockup报错突然出现在日志中时保持冷静并执行以下标准化应急流程关键检查点优先级排序立即通过top -c -H查看CPU占用最高的线程及其调用栈执行dmesg -T | grep -i lockup确认报错出现的频率和模式使用mpstat -P ALL 1观察各核心的IRQ中断分布情况记录/proc/sys/kernel/watchdog_thresh当前阈值设置注意不要急于重启服务器先保存完整的故障现场信息包括dmesg -T dmesg.logcp /proc/slabinfo slabinfo.loggzip -c /var/log/messages messages.gz典型的soft lockup报错结构解析[Mon Dec 30 18:39:04 2019] NMI watchdog: BUG: soft lockup - CPU#1 stuck for 31s! [sshd:5071] [Mon Dec 30 18:39:04 2019] Modules linked in: ipmi_devintf ipmi_msghandler sunrpc... [Mon Dec 30 18:39:04 2019] CPU: 1 PID: 5071 Comm: sshd Kdump: loaded Tainted: G [Mon Dec 30 18:39:04 2019] RIP: 0010:[ffffffff91f904dc] iowrite160x1c/0x40 [Mon Dec 30 18:39:04 2019] Call Trace: [Mon Dec 30 18:39:04 2019] [ffffffffc02a8b76] vp_notify0x16/0x20 [virtio_pci]2. 深度诊断从Call Trace到根本原因定位2.1 堆栈信息逆向工程实战Call Trace中的每个函数调用都暗藏玄机。以网络驱动导致的lockup为例我们需要关注锁定最后执行的内核函数RIP指向iowrite16表明卡在I/O操作追溯模块依赖链Modules linked in显示virtio_pci和virtio_net被加载关联进程上下文虽然sshd被标记但实际可能是其触发的网络操作导致典型问题模式对照表Call Trace特征可能原因验证方法大量virtio相关函数虚拟化驱动bug升级virtio驱动或切半虚拟化重复出现rcu_sched内核任务调度阻塞检查/proc/sys/kernel/rcu_cpu_stall_timeout涉及ext4/jbd2函数文件系统死锁执行dmesg包含radeon/nouveau等GPU驱动显卡驱动问题尝试nomodeset内核参数启动2.2 CentOS 7专项排查工具箱针对CentOS 7特有的排查命令组合# 检查当前watchdog配置 sysctl -a | grep watchdog # 追踪内核函数调用 perf probe --add iowrite16 perf stat -e probe:iowrite16 -a sleep 10 # 检查CPU异常状态 turbostat --show Core,CPU,Avg_MHz,Busy%,Bzy_MHz -i 5关键参数调整建议# 临时放宽检测阈值单位秒最大60 echo 30 /proc/sys/kernel/watchdog_thresh # 启用lockup时自动panic echo 1 /proc/sys/kernel/softlockup_panic3. 系统性排查硬件与环境的交叉验证3.1 硬件健康检查清单电源稳定性检测# 检查电压波动需ipmitool ipmitool sensor list | grep -i voltCPU状态诊断# 检查温度与节流状态 cat /proc/cpuinfo | grep -i mhz sensors | grep Core内存错误统计dmidecode -t memory | grep -A5 Error3.2 虚拟化环境专项检查对于KVM虚拟机的特殊注意事项配置对比表问题场景宿主检查点客户机检查点CPU过载virsh vcpuinfo VMlscpu -e内存气球驱动异常virsh dommemstat VMgrep Balloon /proc/modulesVirtio-net丢包ethtool -S eth0ethtool -k eth0提示在VM环境中频繁出现soft lockup时可尝试在grub添加divider10 clocksourcetsc tscreliable参数4. 根治方案从临时修复到长期防护4.1 内核参数优化模板/etc/sysctl.d/10-anti-lockup.conf推荐配置kernel.watchdog_thresh 30 kernel.softlockup_panic 1 kernel.nmi_watchdog 1 kernel.hung_task_timeout_secs 600 vm.dirty_ratio 10 vm.dirty_background_ratio 54.2 监控体系增强方案Prometheus监控规则示例groups: - name: lockup-detector rules: - alert: KernelSoftLockup expr: increase(kernel_softlockup_panic[1h]) 0 for: 5m labels: severity: critical annotations: summary: Soft lockup detected on {{ $labels.instance }} description: CPU {{ $labels.cpu }} stuck for {{ $labels.duration }}日志监控增强配置ELK示例{ grok: { match: { message: NMI watchdog: BUG: soft lockup - CPU%{NUMBER:cpu_num} stuck for %{NUMBER:duration}s } } }5. 典型场景案例库案例1Virtio网络驱动导致的锁死现象每次大文件传输时出现lockupCall Trace涉及virtio_net解决# 关闭TSO/GRO特性 ethtool -K eth0 tso off gro off # 或切换为e1000网卡驱动案例2CPU节流引发的误报现象BIOS日志显示CPU过热降频解决# 禁用C-states echo 1 /sys/module/intel_idle/parameters/max_cstate案例3内核与KVM兼容性问题现象仅在特定内核版本出现解决# 添加启动参数 grubby --update-kernelALL --argsnohz_full1-3 isolcpus1-3掌握这套方法论后面对soft lockup报错时你不再需要盲目重启。记得每次处理完问题后将完整的诊断过程和解决方案记录到内部知识库——这些实战经验比任何理论文档都更有价值。

更多文章