近期遇到一台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