问题描述
使用Linux操作系统的弹性云主机发生异常重启事件,错误提示如下:
Kernel panic – not syncing: NMI: Not continuing
同时,内核日志输出如下信息:
[…] Uhhuh. NMI received for unknown reason 20 on CPU 1.
[…] Do you have a strange power saving mode enabled?
[…] Kernel panic - not syncing: NMI: Not continuing
可能原因
如果Linux操作系统弹性云主机的内核参数kernel.unknown_nmi_panic配置为1,则云主机实例会在系统收到NMI中断时主动panic导致系统重启。NMI中断(Non-Maskable Interrupt,非可屏蔽中断)是操作系统中的一种特殊类型的中断,它具有比其他中断更高的优先级,并且通常无法被屏蔽或忽略。因此NMI中断通常用于处理一些关键的系统事件,例如硬件故障、系统崩溃、内存校验错误等,这些事件需要立即引起处理,而不能等待其他正在进行的任务完成。内核参数kernel.unknown_nmi_panic配置为1的目的是为了通过触发NMI中断主动通过panic系统进行问题定位。不过由于个别型号的CPU会在正常业务流程中同样产生NMI中断,如果在这种情况下仍将内核参数kernel.unknown_nmi_panic配置为1,将会触发云主机产生非预期的异常重启事件。
解决方案
-
远程登录弹性云主机。
-
执行以下命令,查看该云主机关于内核参数kernel.unknown_nmi_panic的配置值
sysctl -n kernel.unknown_nmi_panic
如果该参数的取值为1,说明是由于内核参数配置错误引起的云主机异常重启。
[root@centos ~]# sysctl -n kernel.unknown_nmi_panic 1
-
在系统的/etc/sysctl.conf文件中查看是否存在内核参数kernel.unknown_nmi_panic相关配置。如果存在kernel.unknown_nmi_panic=1的配置,将该配置改为kernel.unknown_nmi_panic=0;如果不存在kernel.unknown_nmi_panic=1的配置,则在该文件中增加kernel.unknown_nmi_panic=0的配置信息。
-
执行systecl -p命令使配置生效。
[root@centos ~]# sysctl -p kernel.unknown_nmi_panic = 0
结果验证
执行以下两个命令,查看结果是否均为0。如果验证结果符合预期,则说明修改成功。
[root@centos~]#cat
/proc/sys/kernel/panic_on_unrecovered_nmi
0
[root@centos ~]# sysctl -n kernel.unknown_nmi_panic
0