核心軟死鎖(soft lockup)
虛拟機終端報死鎖:
[[email protected] ~]#
Message from [email protected] at Jul 15 10:09:53 ...
kernel:NMI watchdog: BUG: soft lockup - CPU#4 stuck for 35s! [kworker/4:2:530]
Message from [email protected] at Jul 15 10:09:54 ...
kernel:NMI watchdog: BUG: soft lockup - CPU#2 stuck for 47s! [safe_timer:2422]
Message from [email protected] at Jul 15 10:09:54 ...
kernel:NMI watchdog: BUG: soft lockup - CPU#3 stuck for 35s! [ms_pipe_write:2891]
Message from [email protected] at Jul 15 10:09:54 ...
kernel:NMI watchdog: BUG: soft lockup - CPU#1 stuck for 35s! [tuned:1735]
Message from [email protected] at Jul 15 10:09:54 ...
kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 47s! [tp_osd_tp:2676]
Message from [email protected] at Jul 15 10:09:54 ...
kernel:NMI watchdog: BUG: soft lockup - CPU#5 stuck for 35s! [kworker/5:1:65]
You have new mail in /var/spool/mail/root
Soft lockup:這個bug沒有讓系統徹底當機,但是若幹個程序(或者kernel thread)被鎖死在了某個狀态(一般在核心區域),很多情況下這個是由于核心鎖的使用的問題。
出現死鎖原因
1、CPU高負載時間過長
2、伺服器電源供電不足,導緻CPU電壓不穩定
3、vcpus超過實體cpu cores
4、虛機所在的主控端的CPU太忙或磁盤IO太高
5、虛機機的CPU太忙或磁盤IO太高
6、VM網卡驅動存在bug,處理高水位流量時存在bug導緻CPU死鎖
7、BIOS開啟了超頻,導緻超頻時電壓不穩,容易出現CPU死鎖
8、Linux kernel或KVM存在bug
9、BIOS Intel C-State開啟導緻,關閉可解決
10、BIOS spread spectrum開啟導緻
當主機闆上的時鐘震蕩發生器工作時,脈沖的尖峰會産生emi(電磁幹擾)。spread spectrum(頻展)設定功能可以降低脈沖發生器所産生的電磁幹擾,脈沖波的尖峰會衰減為較為平滑的曲線。
如果我們沒有遇到電磁幹擾問題,建議将此項設定為disabled,這欄可以優化系統的性能表現和穩定性;
否則應該将此項設定為enabled。 如果對cpu進行超頻,必須将此項禁用。因為即使是微小的脈沖值漂移也會導緻超頻運作的cpu鎖死。CPU超頻時,SPREAD SPECTRUM必須關閉,否則容易出現鎖死cpu的情況。
Linux核心死鎖檢測機制
死鎖就是多個程序(線程)因為等待别的程序已占有的自己所需要的資源而陷入阻塞的一種狀态,死鎖狀态一旦形成,程序本身是解決不了的,需要外在的推動,才能解決,最重要的是死鎖不僅僅影響程序業務,而且還會占用系統資源,影響其他程序。是以核心中設計了核心死鎖檢測機制,一旦發現死鎖程序,就重新開機OS,快刀斬亂麻解決問題。之是以使用重新開機招數,還是在于分布式系統中可以容忍單點崩潰,不能容忍單點程序計算異常,否則進行死鎖檢測重新開機OS就得不償失了。
解決辦法
echo 30 > /proc/sys/kernel/watchdog_thresh
echo "kernel.watchdog_thresh=30" >> /etc/sysctl.conf
sysctl -w kernel.watchdog_thresh=30
sysctl -q vm.swappiness
sysctl -p
sudo systemctl stop mysqld
sudo systemctl disable mysqld
分布式系統最直接的方法是重新開機Linux,重新開啟程序