【实战】磁盘IO导致的Linux 内核错误 soft lockup-CPU 3 stuck for 22s!

本文介绍了生产环境中遇到的Linux内核软死锁问题,表现为`kernel: BUG: soft lockup - CPU#3 stuck for 22s!`。初步认为是Java程序导致,但深入分析发现与磁盘IO高有关。通过iostat和iotop监控,发现ext4文件系统的jbd2进程引起IO问题,最终通过更换为XFS文件系统解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景

公司生产环境某应用程序所在的CENTOS虚拟主机的系统日志了同现如下日志提示:

kernel: BUG: soft lockup - CPU#3 stuck for 22s! [xxxx:48]

其中xxxx部分有多个不同类型的程序,如ksoftirqd,khugepaged,kworker,nginx,java等。

因为出现此错误提示时,相应的java应用服务通常也会出现访问不了的情况,于是公司的运维同事直接粗暴认为是相应的java程序代码写了死循环导致,但通过排查代码,并未有发现明显会出现死循环的代码逻辑。

二、内核软死锁(soft lockup)通常原因

通过网上查到相关信息,关于kernel: BUG: soft lockup,大部分的说法都说是说,因为CPU太忙导致喂狗(watchdog)不及时,此时系统会打印CPU死锁信息;这个bug没有让系统彻底死机,但是若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),很多情况下这个是由于内核锁的使用的问题。(但是据我所知,大部分的java程序都不会也不知道如何去调用系统的内核锁)。

按网上所述:Linux内核对于每一个cpu都有一个监控进程,在技术界这个叫做watchdog(看门狗)。通过ps –ef | grep watchdog能够看见,进程名称大概是watchdog/X(数字:cpu逻辑编号1/2/3/4之类的)。这个进程或者线程每一秒钟运行一次,否则会睡眠和待机。这个进程运行会收集每一个cpu运行时使用数据的时间并且存放到属于每个cpu自己的内核数据结构。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值