當服務器出現
CPU 軟鎖死(
Soft Lockup),系統日志頻繁報 “NMI watchdog: BUG” 時,往往是內核級問題在作祟。本文結合實戰案例,帶你從原理到解決方案全面拆解!
軟鎖死是指 CPU 核心因內核線程長時間占用(如死循環、資源競爭)無法響應調度,導致系統假死但未完全崩潰的狀態。內核通過
Watchdog 機制檢測:每個 CPU 的看門狗線程若超過閾值(默認 20 秒)未被調度,即觸發告警并記錄日志。
- 內核代碼缺陷
- 自旋鎖(Spinlock)使用不當導致死鎖
- 驅動程序無限循環(如 i40e 網卡驅動高流量 Bug)
- 資源過載
- 單進程占用 100% CPU(如未調用 GPU 的計算任務)
- 硬件隱患
- 電源供電不穩、CPU 電壓異常
- BIOS 超頻或頻展(Spread Spectrum)開啟
- 虛擬化環境
- 虛擬機 vCPU 超過物理核心數
- 宿主機 I/O 或 CPU 壓力傳導
- 內核參數配置
- watchdog_thresh 閾值設置不合理(默認 20 秒)
- 中斷處理異常
- 調試工具缺失
- 未啟用 softlockup_panic 導致無法捕獲內核 Core
- 快速定位
- 日志分析:
grep -C 5 "soft lockup" /var/log/messages
- 進程排查:
ps -ef | grep <進程名>
(如 kworker、qmgr)
- 臨時緩解
- 調整超時閾值:
sysctl -w kernel.watchdog_thresh=30
(延長至 30 秒)
- 強制觸發 panic:
echo 1 > /proc/sys/kernel/softlockup_panic
(需提前安裝 kdump)
- 內核跟蹤工具
- ftrace:掛載 debugfs 后,通過
/sys/kernel/debug/tracing
跟蹤函數調用鏈
- perf:
perf record -g
捕獲 CPU 熱點函數
- 硬件健康檢查
- 使用
lm-sensors
監控溫度 / 電壓
- 關閉 BIOS 超頻和頻展功能
- 內核升級
- 優先升級至穩定版內核(如 5.15+)以修復已知 Bug
- 代碼優化
- 審查高負載進程邏輯(如避免無限制循環)
- 優化中斷處理:分離快速路徑與延遲工作
- 參數固化
- 在
/etc/sysctl.conf
添加:
kernel.watchdog_thresh=30
kernel.softlockup_panic=1
kernel.unknown_nmi_panic=1
?
執行sysctl -p
生效
文章鏈接: http://www.qzkangyuan.com/36435.html
文章標題:CPU 軟鎖死:內核 Bug 排查與解決方案
文章版權:夢飛科技所發布的內容,部分為原創文章,轉載請注明來源,網絡轉載文章如有侵權請聯系我們!
聲明:本站所有文章,如無特殊說明或標注,均為本站原創發布。任何個人或組織,在未征得本站同意時,禁止復制、盜用、采集、發布本站內容到任何網站、書籍等各類媒體平臺。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。