遇到“BUG: soft lockup - CPU#0 stuck for 22s”的解决思路

以前开发的抓包模块上线后有客户反馈有丢包问题,这两天在定位这个丢包问题,抓包模块由我和另外一名“队友”负责,我负责底层抓包开发,他负责接收处理。在测试丢包问题的时候,他遇到一个板子连不上的状况,问我咋回事,恰好看到了log打印一行,app

[27468.016028] BUG: soft lockup - CPU#1 stuck for 22s! [hagnatsd:1782]
HELLO! BOOT0 is starting!
boot0 version : 4.0.0
rtc[1] value = 0x00010000

一看就是内核软锁死,而后系统重启了。这个问题比较严重,若是模块有问题不影响系统运行还算小事,但系统挂了那就算大事了。当时也是一头雾水,用了那么久,怎么忽然跑出来这样的问题。看问题应该是代码里面原子锁的使用问题,致使系统锁死,代码比较多,一时半会儿又走读不过来,因而就尝试复现这个问题。瞎搞了两个小时, 功夫不负有心人 (⊙_⊙) ,终于又出现了一次, 一样是锁死测试

[  688.008033] BUG: soft lockup - CPU#0 stuck for 22s! [quickstart:2532]
[  723.231005] INFO: rcu_preempt self-detected stall on CPU
[  723.232008] INFO: rcu_preempt detected stalls on CPUs/tasks: { 0} (detected by 3, t=60002 jiffies)
[  723.232024] INFO: Stall ended before state dump start
[  723.231005] Backtrace for cpu 0 (current):
[  723.231005] 
[  723.231005] sending IPI to all other CPUs:
[  723.265047] IPI backtrace for cpu 2
[  723.266009] IPI backtrace for cpu 1
[  723.271893] IPI backtrace for cpu 3
[  723.273107] IPI backtrace for cpu 5
[  723.266009] IPI backtrace for cpu 7
[  723.266009] IPI backtrace for cpu 6
[  723.295307] IPI backtrace for cpu 4
[  760.144028] BUG: soft lockup - CPU#4 stuck for 22s! [swapper/4:0]
[  787.618047] CIFS VFS: Server 172.25.1.90 has not responded in 120 seconds. Reconnecting...
[  903.236006] INFO: rcu_preempt self-detected stall on CPU
[  903.237012] INFO: rcu_preempt detected stalls on CPUs/tasks: { 0} (detected by 6, t=240007 jiffies)
[  903.237028] INFO: Stall ended before state dump start
[  903.236006] Backtrace for cpu 0 (current):
[  903.236006]

因而分析了本身的操做步骤,将代码流程分开,一步一步测试,最终问题定位到一处代码BUG, 程序走到死循环致使外部的读写锁没法释放,修改后得以解决。ui

总结经验就是日常遇到这类问题必定要重视,千万不要放过,就算不能解决也要找boss聊一聊其它方案。否则等到了客户那边问题会更大,并且不在现场更不方便调试。其次就是仔细分析问题产生现象,尝试重现问题,再结合具体的代码流程分析,相似这种软锁死问题基本上就是自身代码逻辑问题,仔细走读代码,分析代码流程 一步一步测试,最终定位问题根源才会完全解决问题。调试

=============================================================================================code

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同窗能够加群讨论、交流、资料查找等,前进的道路上,你不是一我的奥^_^。
 开发