报错kernel:NMI watchdog: BUG: soft lockup

摘要:
最近,服务器上运行了大量高负载程序,导致cpusoftlock。vi/etc/sysctl.conf内核。watchdog_Threshold=30参考文章:CentOS内核。相应的文件是/proc/sys/kernel/watchdog_thresh此函数将首先检查看门狗线程是否已挂起。如果不是看门狗线程,它将检查当前占用CPU的线程占用的时间是否超过系统配置的阈值,即softlockup_thresh因此,您必须手动修改/proc/sys/kernel/softlockup_ panic的值允许内核在出现死锁或循环时关闭。CentOS内核和标准内核的另一个区别是,它处理处理CPU所需时间过长的函数。CentOS下有一个watchdog_timer_Fn()函数。硬软锁定意味着内核已被挂起,您可以通过看门狗等机制获取详细信息。

近期在服务器跑大量高负载程序,造成cpu soft lockup。如果确认不是软件的问题。

解决办法:

#追加到配置文件中

echo 30 > /proc/sys/kernel/watchdog_thresh 

#查看

[root@git-node1 data]# tail -1 /proc/sys/kernel/watchdog_thresh
30

#临时生效

sysctl -w kernel.watchdog_thresh=30

#内核软死锁(soft lockup)bug原因分析

Soft lockup名称解释:所谓,soft lockup就是说,这个bug没有让系统彻底死机,但是若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),很多情况下这个是由于内核锁的使用的问题。


vi /etc/sysctl.conf

kernel.watchdog_thresh=30

参考文章:

CentOS内核,对应的文件是/proc/sys/kernel/watchdog_thresh。
CentOS内核和标准内核还有一个地方不一样,就是处理CPU占用时间过长的函数,CentOS下是watchdog_timer_fn()函数。
如果你的内核是标准内核的话,可以通过修改/proc/sys/kernel/softlockup_thresh来修改超时的阈值
参考文献:https://zhidao.baidu.com/question/1829924822713415300.html

首先,这条信息可以输出,说明即使发生死锁或者死循环,还是有代码可以执行。第二,可以通过这个日志信息,找到对应的处理函数,这个函数所在的模块就是用来处理CPU被过度使用时用到的。所以通过这个事情,可以看到内核打印出的只言片语都有可能成为你解决问题的关键,一定要从重视这些信息,从中找出有用的东西。
我经常看的内核版本是官方的2.6.32内核,这个版本中我找到的函数是softlockup_tick(),这个函数在时钟中断的处理函数run_local_timers()中调用。这个函数会首先检查watchdog线程是否被挂起,如果不是watchdog线程,会检查当前占有CPU的线程占有的时间是否超过系统配置的阈值,即softlockup_thresh。如果当前占有CPU的时间过长,则会在系统日志中输出我们上面看到的那条日志。接下来才是最关键的,就是输出模块信息、寄存器信息和堆栈信息,检查softlockup_panic的值是否为1。如果softlockup_panic为1,则调用panic()让内核挂起,输出OOPS信息。代码如下所示:/** This callback runs from the timer interrupt, and checks
* whether the watchdog thread has hung or not:*/void softlockup_tick(void){int this_cpu = smp_processor_id();
unsigned long touch_timestamp = per_cpu(touch_timestamp, this_cpu);
unsigned long print_timestamp;
struct pt_regs *regs = get_irq_regs();
unsigned long now;
/* Warn about unreasonable delays: */
if (now <= (touch_timestamp + softlockup_thresh))return;
per_cpu(print_timestamp, this_cpu) = touch_timestamp;
spin_lock(&print_lock);
printk(KERN_ERR BUG: soft lockup - CPU#%d stuck for %lus! [%s:%d]
,
this_cpu, now - touch_timestamp,
current-comm, task_pid_nr(current));
print_modules();
print_irqtrace_events(current);if (regs)show_regs(regs);elsedump_stack();
spin_unlock(&print_lock);
if (softlockup_panic)
panic(softlockup: hung tasks);}
但是softlockup_panic的值默认竟然是0,所以在出现死锁或者死循环的时候,会一直只输出日志信息,而不会宕机,这个真是好坑啊!所以你得手动修改/proc/sys/kernel/softlockup_panic的值,让内核可以在死锁或者死循环的时候可以宕机。如果你的机器中安装了kdump,在重启之后,你会得到一份内核的core文件,这时从core文件中查找问题就方便很多了,而且再也不用手动重启机器了。如果你的内核是标准内核的话,可以通过修改/proc/sys/kernel/softlockup_thresh来修改超时的阈值,如果是CentOS内核的话,对应的文件是/proc/sys/kernel/watchdog_thresh。CentOS内核和标准内核还有一个地方不一样,就是处理CPU占用时间过长的函数,CentOS下是watchdog_timer_fn()函数。
这里介绍下lockup的概念。lockup分为soft lockup和hard lockup。 soft lockup是指内核中有BUG导致在内核模式下一直循环的时间超过10s(根据实现和配置有所不同),而其他进程得不到运行的机会。hard softlockup是指内核已经挂起,可以通过watchdog这样的机制来获取详细信息。

免责声明:文章转载自《报错kernel:NMI watchdog: BUG: soft lockup》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Doris临时分区 踏雪扬尘Android Studio Run/Debug configuration error: Module not specified下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RPi 树莓派 DSI 接口研究 MIPI raspberry pi

之前一直在玩树莓派,发现有个DSI显示接口一直没有被用上,经过一番研究发现有点意思,记录一下相关资料以后再说。 (update1: 目前全网已经有非常多的方案研究hdmi和mipi的互转方案: a. ) mipi屏幕+hdmi接口:研究最多因为mipi屏幕很多且参数美好。详情google,感谢包括稚晖在内的各路大神的研发,例如pocketLCD方案。 其中...

进程基础知识 操作系统 操作系统的发展史(多道技术) 进程介绍 python并发编程之:多进程

day31一丶进程基础知识 什么是程序: 程序就是一堆文件 什么是进程: 进程就是一个正在执行的文件/程序,是对各种资源管理的集合, 进程不具有执行的能力 每个应用是以一个整体的形式暴露给操作系统去管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等等 进程被谁执行: CPU最终运行你的程序,操作系统调用作用,将磁盘上的程序读取到内存中,然后交由...

数据库SQL优化大总结之 百万级数据库优化方案(转载)

网上关于SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。 这篇文章我花费了大量的时间查找资料、修改、排版,希望大家阅读之后,感觉好的话推荐给更多的人,让更多的人看到、纠正以及补充。   一、百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 o...

在ASP.NET Web API和ASP.NET Web MVC中使用Ninject

先附上源码下载地址 一、准备工作 1、新建一个名为MvcDemo的空解决方案 2、新建一个名为MvcDemo.WebUI的空MVC应用程序 3、使用NuGet安装Ninject库   二、在ASP.NET MVC中使用Ninject 1、新建一个Product实体类,代码如下: public class Product { pub...

操作系统概念学习笔记三 cpu调度算法

一 基本概念 1 队列中的记录通常是进程的进程控制块。 2 CPU调度决策可在如下四种环境下发生 a 当一个进程从运行状态切换到等待状态 例如,I/O请求或调用wait以等待一个子进程的终止 b 党一个进程从运行状态切换到就需状态 例如,当出现中断 c 当一个进程从等待状态切换到就需状态 例如,I/O完成 d 当一个进程终止 当调度只能发生在第一和第...

MySQL的瑞士军刀(转)

这里主要讲mysql运维中的一些主要工具,这些工具可能大家都用过,特别是系统管理员或者做linux服务器维护的同学可能都知道这些小工具,这 里讲得会比较多一些,除了系统监控的小工具,还包括一些mysql的工具,甚至深入一些的工具也会讲到,重点是大家听完了后,一定要去自己动手实践一下, 这样才有意义,熟能生巧。 光听说过是不行的,还得都要去实践,实践出真知,...