内核报错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-tcpdump指令

    Linux-tcpdump指令 tcpdump是Linux和其他类Unix系统中用于捕获和分析网络流量的命令行工具。它被广泛应用于网络诊断、故障排除、安全分析以及网络流量监控等场景…

    Linux 2025年1月27日
  • 服务器IO读写/下载测速脚本SuperBench

    前言 有的朋友想测试一下自己的服务器硬盘读写速度及各地到自己服务器的网速,所以就诞生了这款脚本SuperBench,这款脚本原作者已停止更新,此脚本为修复版,支持Centos8 介…

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

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

    Linux 2023年8月29日
  • VMware NAT模式将虚拟机IP设置为固定IP

    简介 第一种方式:使用DHCP协议自动获取;每次启动虚拟机都需要把网口UP一下,IP可能会变第二种方式:推荐使用这种,因为以后工作中需要让服务器具有固定IP,才能访问到,要是一直变…

    2023年9月15日
  • Linux系统华为昇腾910B NPU驱动安装教程

    安装驱动和固件下载链接 https://www.hiascend.com/hardware/firmware-drivers/community?product=4&mod…

    Linux 2025年2月14日
  • 探索与筑梦:我的博客网站进化传奇

    引言 在这片浩渺的数字宇宙里,每一个网站都是一个独特的星球,闪烁着创造者梦想的光芒。这不仅是一部技术探险的编年史,更是一段用热爱与坚韧书写的心灵之旅。让我们一同回溯,从一张空白的H…

    2024年6月15日
  • Linux 的性能调优的思路

    Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的apache、tomcat、mysql等。 开源软件的最大理念是自由…

    Linux 2023年11月20日
  • 麒麟系统Ping报错:未知的名称或服务

    前言 在/etc/hosts里添加了集群服务器的主机名+IP,但是ping主机名提示:未知的名称或服务 ping域名和其他的IP都可以正常返回 处理步骤 修改/etc/nsswit…

    2024年6月25日
  • Linux应急处置/信息搜集/漏洞检测工具

    Linux应急处置/信息搜集/漏洞检测工具,支持基础配置/网络流量/任务计划/环境变量/用户信息/Services/bash/恶意文件/内核Rootkit/SSH/Webshell…

    Linux 2024年8月2日
  • LVM 缩减 / 根目录导致的开机错误

    前景描述 给服务器lv_var扩容,没空间扩容,于是将lv_root由200G缩小至100G,几分钟后,服务器告警,ping状态变为停止,于是登陆服务器管理口远程查看 报错过程 发…

    Linux 2022年9月25日

发表回复

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