圈小蛙

Linux服务器内核报错无法关机或者重启的状态下强制重启

近期遇到一台Linux服务器,不停内核报错:kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 20s,然后执行所有命令都返回这个报错,包括shutdown与reboot都不行。使用shutdown -r now或者reboot、init 6命令也无法实现重启。

网上查了下“内核软死锁”(soft lockup):

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

所以许多命令无法返回。此时执行以下命令可以解决问题:

echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger

成功立即重启,问题解决。网上找到的解释:

1. /proc/sys/kernel/sysrq

向sysrq文件中写入1是为了开启SysRq功能。

SysRq代表的是Magic System Request Key。开启了这个功能以后,只要内核没有挂掉,它就会响应你要求的任何操作。但是这需要内核支持(CONFIG_MAGIC_SYSRQ 选项),向/proc/sys/kernel/sysrq中写入0是关闭 SysRq 功能,写入1是开启。

2. /proc/sysrq-trigger

立即重新启动计算机:

echo "b" > /proc/sysrq-trigger

立即关闭计算机:

echo "o" > /proc/sysrq-trigger

导出内存信息:

echo "m" > /proc/sysrq-trigger

导出所有标志位和寄存器信息:

echo "p" > /proc/sysrq-trigger

导出线程状态信息:

echo "t" > /proc/sysrq-trigger

使系统崩溃:

echo "c" > /proc/sysrq-trigger

同步连接系统磁盘:

echo "s" > /proc/sysrq-trigger

重新挂载所有文件系统为只读:

echo "u" > /proc/sysrq-trigger

Exit mobile version