https://blog.csdn.net/sunny05296/article/details/82858071
最近碰到了Centos7.2上終端打印soft lockup CPU死鎖,系統無響應狀態。直接原因是:如果CPU太忙導致喂狗(watchdog)不及時,系統會打印CPU死鎖信息:
kernel:BUG: soft lockup - CPU#0 stuck for 38s! [kworker/0:1:25758]
kernel:BUG: soft lockup - CPU#7 stuck for 36s! [java:16182]
......
內核參數kernel.watchdog_thresh(/proc/sys/kernel/watchdog_thresh)系統默認值為10。如果超過2*10秒會打印信息,注意:調整值時參數不能大於60。
調整該值可以延長喂狗等待時間,但是不能徹底解決問題,需要找到根本原因。
可以打開panic,將/proc/sys/kernel/panic的默認值0改為1,便於定位。
引發CPU死鎖的原因有很多種:
* 服務器電源供電不足,導致CPU電壓不穩導致CPU死鎖
* vcpus超過物理cpu cores(虛擬CPU數超過物理CPU數)
* 虛機所在的宿主機的CPU太忙或磁盤IO太高
* 虛機的的CPU太忙或磁盤IO太高
* BIOS KVM開啟以后的相關bug,關閉KVM可解決,但關閉以后物理機不支持虛擬化
* VM網卡驅動存在bug,處理高水位流量時存在bug導致CPU死鎖
* BIOS開啟了超頻,導致超頻時電壓不穩,容易出現CPU死鎖
* Linux kernel存在bug
* KVM存在bug
* clocksource tsc unstable on CentOS and cloud Linux with Hyper-V Virtualisation
https://unix.stackexchange.com/questions/70377/bug-soft-lockup-cpu-stuck-for-x-seconds
通過設置clocksource=jiffies可解決
* BIOS Intel C-State開啟導致,關閉可解決
* BIOS spread spectrum開啟導致
當主板上的時鍾震盪發生器工作時,脈沖的尖峰會產生emi(電磁干擾)。spread spectrum(頻展)設定功能可以降低脈沖發生器所產生的電磁干擾,脈沖波的尖峰會衰減為較為平滑的曲線。
如果我們沒有遇到電磁干擾問題,建議將此項設定為disabled,這欄可以優化系統的性能表現和穩定性;
否則應該將此項設定為enabled。 如果對cpu進行超頻,必須將此項禁用。因為即使是微小的脈沖值漂移也會導致超頻運行的cpu鎖死。
再次強調:CPU超頻時,SPREAD SPECTRUM必須關閉,否則容易出現鎖死cpu的情況。
