当前位置: 首页 > Linux

内核报错kernel-NMIwatchdog-BUG-softlockup-CPU#2

时间:2023-04-06 06:02:18 Linux

本文由吴老师的博客吴老师发表!一、现象描述系统管理员来电通知,描述某台服务器突然无法连接ssh。登录服务器带外IP地址,进入远程控制台界面后提示Authenticationerror。重启后即可正常进入系统。进入后,会进入死循环20分钟2.排查原因登录系统后,没有任何操作,报错如下:问过度娘,发现这个错误是内核锁死,简称“崩溃”。问了管理员,得知服务器最近安装了docker,可能是高负载引起的Softlockup:这个bug并没有完全让系统崩溃,而是几个进程(或者内核线程)被锁在了某个状态(通常是在内核区),在很多情况下这是由于内核锁的使用问题。内核参数kernel.watchdog_thresh(/proc/sys/kernel/watchdog_thresh)默认值为10,如果超过2*10秒,就会打印信息。注意:调整值时参数不能大于60。Linux内核对每个CPU都有一个监控进程。在技??术世界里,这叫做看门狗(watchdog)。通过ps–ef|可以看到grepwatchdog,进程名大概是watchdog/X(编号:cpu逻辑号1/2/3/4之类)。该进程或线程每秒运行一次,否则休眠并等待。这个进程在运行时,会收集每个cpu在运行时使用的时间,存储在属于每个cpu的自己的内核数据结构中。内核中有很多特定的中断函数。这些中断函数会调用softlockupcount,会使用当前时间戳与特定(对应)cpu的内核数据结构中保存的时间进行比较,如果发现当前时间戳大于时间由相应的cpu保存的值比设置的valve值大,他假设监控进程或看门狗线程在相当长的时间内没有被执行。为什么会出现CPU软锁,又是如何产生的?如果linux内核是经过精心设计和安排的CPU调度访问,怎么会出现CPU的软死锁呢?那么只能说是由于引入了用户自研或者第三方软件,造成我们服务器kernelpanic的原因是qmgr进程引起的。因为每次死循环总会有一个cpu执行进程(qmgr进程是后台邮件的消息队列服务进程),并且有一定的优先级。CPU调度器调度一个驱动程序运行,如果驱动程序有问题而没有被检测到,驱动程序会暂时长时间使用CPU。根据前面的描述,看门狗进程会捕获(catch)这个并抛出一个软锁定(softlockup)错误。软死锁会挂起CPU,使您的系统无法使用。三、具体分析######1、系统重启时间如下:Mar321:53:16ser-node7kernel:Linuxversion3.10.0-957.el7.x86_64(mockbuild@x86040.build.eng.bos.redhat.com)Mar322:37:19ser-node7内核:Linux版本3.10.0-957.el7.x86_64(mockbuild@x86040.build.eng.bos.redhat.com)重启时之前已经出现了cpusoftlock的现象,深入分析cpusoftlock,我们依赖kdump产生的vmcore数据。3月3日14:28:18ser-node7内核:NMI看门狗:BUG:软锁定-CPU#5卡住了22秒![runc[1:CHILD]:52902]Mar218:14:59ser-node7内核:NMI看门狗:BUG:软锁定-CPU#3卡住了23秒![runc:[1:CHILD]:55961]./systemctl_list-unit-files:kdump.serviceenabled如果你以前这样做过,请修改/etc/sysctl.conf以添加以下行:kernel.softlockup_panic=1和执行“sysctl-p”启用参数。这样当系统出现cpusoftlock现象时,会自动触发kernelpanic。此时如果kdump能够正常工作,就会生成vmcore并自动重启系统2。另外,我们还注意到日志中有如下告警,这和上面的softlockup问题没有直接关系。#catmessages|grep“SLUB:无法在节点上分配内存”Mar218:04:45ser-node7内核:SLUB:无法在节点-1(gfp=0xd0)3月3日14:54:25ser-node7内核上分配内存:SLUB:Unabletoallocatememoryonnode-1(gfp=0xd0)Mar314:54:25ser-node7kernel:SLUB:Unabletoallocatememoryonnode-1(gfp=0xd0)这是一个已知的系统错误,详情请参考以下知识库:SLUB:Unabletoallocatememoryonnode-1(gfp=0x20)https://access.redhat.com/sol...根据这个知识库,请升级内核到内核-3.10.0-1062.4.1.el7或更新。kernel-3.10.0-1062.4.1.el7的下载地址是:https://access.redhat.com/err...如何升级内核,请查看以下文档:Howtoupdate/upgradetheRedHatEnterpriseLinux内核?https://access.redhat.com/sol...4.解决方案百度大手子给出的解决方案如下:vi/etc/sysctl.confkernel.watchdog_thresh=30查看:#tail-1/proc/sys/kernel/watchdog_thresh临时效果:#sysctl-wkernel.watchdog_thresh=30原厂建议还在等待