内核报错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日

相关推荐

  • Linux ls 命令提示 Input/output error

    一.问题描述 某一台跑批服务器硬盘无法正常读写,提示input/output error,服务器每天均需使用,询问情况后发现服务器首先为硬盘故障,更换硬盘后提示此错误(RAID已正…

    Linux系统 2021年11月21日
  • 网站被恶意扫描时的反击魔法之一:用gzip压缩炸弹给恶意请求埋地雷

    最近查看网站访问日志,发现有不少恶意扫描和采集本站的请求,虽然被我的防护规则阻挡了,但看着这些源源不断的恶意扫描器的请求,光抵抗不反击,心里头还是有火的。我们的伟大领袖说过:打得一…

    Linux系统 2024年12月16日
  • Linux 破解密码时遇到的问题

    一.生产中的小插曲 重启服务器后按‘E’键,并找到Linux16开头的行,在最后加入rd.break,因服务器为uefi模式,故找到linuxefi开头的行,linux16开头的行…

    Linux系统 2021年11月21日
  • linux系统下记录用户操作历史

    编辑/etc/profile文件末尾添加下列代码,添加完成后保存退出 执行命令:source /etc/profile ,退出当前终端, 之后会在/var/log/history目…

    2021年11月21日
  • Linux 系列基础教程(一)

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

    2022年9月25日
  • Iptables怎么防止常见网络攻击

    什么是syn,ddos,ping SYN (Synchronize): 在 TCP(传输控制协议)中,SYN 是握手过程的一部分。当客户端尝试与服务器建立连接时,它发送一个带有 S…

    C&C++&C# 2023年12月16日
  • Linux中最常用的10个环境变量

    Linux操作系统提供了丰富的环境变量,用于配置和控制系统的行为。本文将介绍Linux中最常用的10个环境变量,并提供示例代码、输出和解析。 1. PATH PATH环境变量定义了…

    C&C++&C# 2024年1月24日
  • Linux系列基础教程(二)-Linux 简介

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

    Linux系统 2022年9月25日
  • Linux exec指令

    Linux exec指令 exec是Linux Shell中一个非常重要的内建命令,用于替换当前shell的进程空间,执行指定命令或脚本而不启动新的子进程。理解和灵活运用exec对…

    Linux系统 2024年12月25日
  • 【Linux通用】Centos系列跳过首次登陆新建用户

    前言 在安装系统后,登录的时候总是让新建一个普通用户,很是烦人,于是想办法解决一下   方法一 在CentOS上,图形化登录(如GNOME)通常要求您创建一个用户来登录。…

    2023年6月21日

发表回复

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