如果您的问题仍未解决,点击我要提问试试。
Linux系统的ECS实例中内核参数kernel.unknown_nmi_panic设置不正确导致实例异常重启
问题描述
在Linux系统的阿里云ECS实例中,内核参数kernel.unknown_nmi_panic
设置不正确,导致实例异常重启。待系统恢复后查看内核日志,提示以下调用栈信息:
[5912557.130943] Uhhuh. NMI received for unknown reason 20 on CPU 0.
[5912557.131115] Do you have a strange power saving mode enabled?
[5912557.131287] Kernel panic - not syncing: NMI: Not continuing
排查方法
通过执行以下命令,查看内核参数kernel.unknown_nmi_panic
的值,发现被设置为1。
sysctl -n kernel.unknown_nmi_panic
问题原因
内核参数 kernel.unknown_nmi_panic
控制着内核,在遇到未知的不可屏蔽中断(Non Maskable Interrupt,简称NMI)时的行为。目前大多数Linux发行版本上kernel.unknown_nmi_panic
的值均设为0,忽略未知的不可屏蔽中断。如果由于某些原因开启了该配置,可能导致内核在收到未知的不可屏蔽中断发生Panic,并出现实例重启的情况。
- 内核参数
kernel.unknown_nmi_panicd
的值被设为1,内核将在遇到未知的不可屏蔽中断时,认为系统出错并触发内核Panic,从而导致实例出现非预期的重启或业务中断。 - 内核参数
kernel.unknown_nmi_panicd
的值设置为0,忽略该问题不做进一步处理,保持实例当前状态继续运行。
解决方案
阿里云提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
当遇到该问题时,您可以参考以下方法进行处理,将内核参数kernel.unknown_nmi_panic
的值设置为0,忽略未知的不可屏蔽中断:
- 登录ECS实例,详情请参见连接方式概述。
- 执行以下命令,查看是否存在内核参数
kernel.unknown_nmi_panic
相关配置。grep 'kernel.unknown_nmi_panic' /etc/sysctl.conf /etc/sysctl.d/*.conf
-
如果已有相关配置,则需要手动删除多余的配置,只保留
/etc/sysctl.conf
文件的中一项并设置为kernel.unknown_nmi_panic = 0
。 - 如果不存在相关配置,请依次执行以下命令,在
/etc/sysctl.conf
文件末尾添加kernel.unknown_nmi_panic = 0
内容。echo >> /etc/sysctl.conf
echo 'kernel.unknown_nmi_panic = 0' >> /etc/sysctl.conf
-
- 执行以下命令,使配置在当前环境中生效。
sysctl -p
说明:如果需要额外修改内核参数,并且不希望重新加载内核参数配置文件,请执行
sysctl -w kernel.unknown_nmi_panic=0
命令,只修改内核参数kernel.unknown_nmi_panic
的值为0
。
适用于
- 云服务器ECS