内核报错kernel:NMI watchdog: BUG: soft lockup – CPU#1

1.现象描述

系统管理员电话通知,描述为一台服务器突然无法ssh连接,登录服务器带外IP地址并进入远程控制台界面后,提示Authentication error,重启后即可正常进入系统,进入后过20分钟又进入死循环

2.排查原因

登录系统后无任何操作报错如下:

内核报错kernel:NMI watchdog: BUG: soft lockup - CPU#1

询问了度娘,发现此报错为内核锁死,简称“死机”,询问管理员后得知,近期服务器安装了docker,可能由于负载过高导致

  • Soft lockup:这个bug没有让系统彻底死机,但是若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),很多情况下这个是由于内核锁的使用的问题。
  • 内核参数kernel.watchdog_thresh(/proc/sys/kernel/watchdog_thresh)系统默认值为10。如果超过2*10秒会打印信息,注意:调整值时参数不能大于60
  • Linux内核对于每一个cpu都有一个监控进程,在技术界这个叫做watchdog(看门狗)。通过ps –ef | grep watchdog能够看见,进程名称大概是watchdog/X(数字:cpu逻辑编号1/2/3/4之类的)。这个进程或者线程每一秒钟运行一次,否则会睡眠和待机。这个进程运行会收集每一个cpu运行时使用数据的时间并且存放到属于每个cpu自己的内核数据结构。在内核中有很多特定的中断函数。这些中断函数会调用soft lockup计数,他会使用当前的时间戳与特定(对应的)cpu的内核数据结构中保存的时间对比,如果发现当前的时间戳比对应cpu保存的时间大于设定的阀值,他就假设监测进程或看门狗线程在一个相当可观的时间还没有执。Cpu软锁为什么会产生,是怎么产生的?如果linux内核是经过精心设计安排的CPU调度访问,那么怎么会产生cpu软死锁?那么只能说由于用户开发的或者第三方软件引入,看我们服务器内核panic的原因就是qmgr进程引起。因为每一个无限的循环都会一直有一个cpu的执行流程(qmgr进程示一个后台邮件的消息队列服务进程),并且拥有一定的优先级。Cpu调度器调度一个驱动程序来运行,如果这个驱动程序有问题并且没有被检测到,那么这个驱动程序将会暂用cpu的很长时间。根据前面的描述,看门狗进程会抓住(catch)这一点并且抛出一个软死锁(soft lockup)错误。软死锁会挂起cpu使你的系统不可用。

3.具体分析

1.系统如下时间2个时间进行了重启:
Mar  3 21:53:16 ser-node7 kernel: Linux version 3.10.0-957.el7.x86_64 (mockbuild@x86040.build.eng.bos.redhat.com)
Mar  3 22:37:19 ser-node7 kernel: Linux version 3.10.0-957.el7.x86_64 (mockbuild@x86040.build.eng.bos.redhat.com) 

在重启前的一段时间均已经出现了cpu软锁的现象,而深入分析cpu软锁,我们依赖于kdump产生的vmcore数据.

Mar  3 14:28:18 ser-node7 kernel: NMI watchdog: BUG: soft lockup - CPU#5 stuck for 22s! [runc[1:CHILD]:52902]
Mar  2 18:14:59 ser-node7 kernel: NMI watchdog: BUG: soft lockup - CPU#3 stuck for 23s! [runc:[1:CHILD]:55961]

./systemctl_list-unit-files:kdump.service enabled
如果您之前已经做过,那么请您额外修改/etc/sysctl.conf加入以下行:
kernel.softlockup_panic = 1
然后执行”sysctl -p”使参数生效。这样当系统出现cpu软锁现象时,会自动触发kernel panic,此时如果kdump可以正常工作,会生成vmcore.并自动重新启动系统

2.另外在日志中我们还注意了存在如下的告警,其和上面的soft lockup问题无直接关系.

# cat messages | grep "SLUB: Unable to allocate memory on node"

Mar  2 18:04:45 ser-node7 kernel: SLUB: Unable to allocate memory on node -1 (gfp=0xd0)
Mar  3 14:54:25 ser-node7 kernel: SLUB: Unable to allocate memory on node -1 (gfp=0xd0)
Mar  3 14:54:25 ser-node7 kernel: SLUB: Unable to allocate memory on node -1 (gfp=0xd0)

此为系统的已知BUG,具体请参考如下KB:

4.解决方案

百度大手子给的方案如下所示:

  • vi /etc/sysctl.conf
    kernel.watchdog_thresh =30
  • 查看:# tail -1 /proc/sys/kernel/watchdog_thresh
  • 临时生效:# sysctl -w kernel.watchdog_thresh=30

原创文章,作者:AIRF,如若转载,请注明出处:http://www.ai-rf.com/index.php/2021/11/21/%e5%86%85%e6%a0%b8%e6%8a%a5%e9%94%99kernelnmi-watchdog-bug-soft-lockup-cpu1/

(0)
AIRFAIRF
上一篇 2021年11月21日
下一篇 2021年11月21日

相关推荐

  • 使用NIM Server网络半自动安装AIX系统

    一、NIM配置 1.安装NIMServer前准备 1.1.配置IP地址 # ifconfig –a #检查当前IP地址# # smitty mktcpip #设置IP地址# 选择第…

    C_C++_C# 2021年11月21日
  • Linux系统重启操作系统后报错提示An error occurred during the file system check.

    一.问题描述 生产环境中一台浪潮NF8480M3外观红灯报警,鉴于无法登陆带外管理口,只能对服务器进行断电重启操作 二.问题现象 重启后进入开机过程并报错,正常来说进入此界面后直接…

    Linux 2021年11月21日
  • Linux双网卡绑定状态验证脚本

    前景 公司内交换机切换,需提前验证服务器系统主备网卡绑定状态 脚本 需提前配置好YUM源或已安装lldpd服务 #!/bin/bash # 安装必要工具 install_lldpa…

    Linux 2025年7月2日
  • 宝塔面板搭配雷池WAF防火墙实战

    背景 因近期总是受到CC攻击,所以就找到了这款免费WAF 雷池是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动。 Slogan: 不让黑客越雷池半步…

    Linux 2023年8月29日
  • Linux系列基础教程(二)-Linux 简介

    Linux 简介 Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类…

    Linux 2022年9月25日
  • 为什么建议使用UUID进行挂载硬盘

    UUID简介 通用唯一识别码(英语:Universally Unique Identifier,简称UUID),UUID为Linux系统中的存储设备提供唯一的标识字符串,不管这个设…

    Linux 2023年1月6日
  • xshell 连接报错 Disconnected from remote host

    前景提示 使用xshell连接服务器IP地址报错 解决方法 1.登陆带外管理口远程控制台2.查看/Var/empty的属主属组和权限,empty权限需为7553.Chmod 777…

    Linux 2021年12月30日
  • Linux 系列基础教程(一)

    Linux 是一种自由和开放源码的类 UNIX 操作系统。 Linux 英文解释为 Linux is not Unix。 Linux 是在 1991 由林纳斯·托瓦兹在赫尔辛基大学…

    2022年9月25日
  • linux系统启动流程

    按下系统的电源开关,过一会就可以看到Linux的登录界面了。 你是否曾经想过,从按下电源开关到登录界面出现,这后面到底发生了什么? Linux 系统在启动过程中,首先是固件(PC …

    Linux 2022年10月6日
  • Linux系统init: prefdm main process terminated with status问题

    问题描述 服务器开机后无法正常进入桌面,查看prefdm服务是负责桌面的,故考虑进入字符界面再次尝试 问题处理 考虑从字符界面进入,进入单用户修改/etc/inttab1.进入单用…

    Linux 2022年8月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注