内核报错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系统init: prefdm main process terminated with status问题

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

    Linux 2022年8月1日
  • 宝塔面板搭配雷池WAF防火墙实战

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

    Linux 2023年8月29日
  • Python自动化Cc压测攻击脚本V2

    仅供压测自己服务器使用,不得用于非法攻击 CCATK-V1 使用socks4 / 5代理攻击http服务器的脚本。 删除了混合代理洪水 新特性: 快速套接字重用 改进的CC模式 随…

    2023年8月31日
  • linux系统下记录用户操作历史

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

    2021年11月21日
  • Centos7下载网络yum源及epel源

    正常情况下,除Redhat系统授权之后才可以正常使用网络yum配置,Centos等衍生版系统只能使用本地yum源,使用时会报错如下: 这时我们就需要先下载epel源,下载后即可正常…

    Linux 2022年10月7日
  • Nginx的负载均衡实现

    环境 主机 ip 用途 软件 web1 192.168.50.60 nginx-1 httpd web2 192.168.50.61 nginx-2 httpd proxy 192…

    C_C++_C# 2023年12月16日
  • Linux系统ssh连接无响应

    一.问题描述 某集群数据节点服务器频繁无法连接,服务器间出现可ping通但ssh无法连接的情况,使用带外地址登录后远程控制也无法显示正常界面,重启后会短暂恢复。 二.排查问题 重启…

    Linux 2021年11月21日
  • Linux Polkit 权限提升漏洞风险

    描述 在 polkit 的 pkexec 实用程序中发现了一个本地权限提升漏洞。pkexec 应用程序是一个 setuid 工具,旨在允许非特权用户根据预定义的策略以特权用户身份运…

    2022年1月28日
  • 使用NIM Server网络半自动安装AIX系统

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

    C_C++_C# 2021年11月21日
  • Linux系统I/O测试工具:fio

    安装: yum install fio yum info fio apt install gfio # fio 图形测试工具 项目地址: https://github.com/ax…

    2022年12月2日

发表回复

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