文档

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,忽略未知的不可屏蔽中断:

  1. 登录ECS实例,详情请参见连接方式概述

  2. 执行以下命令,查看是否存在内核参数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
  3. 执行以下命令,使配置在当前环境中生效。

    sysctl -p
    说明

    如果需要额外修改内核参数,并且不希望重新加载内核参数配置文件,请执行 sysctl -w kernel.unknown_nmi_panic=0命令,只修改内核参数 kernel.unknown_nmi_panic的值为 0

适用于

  • 云服务器ECS

  • 本页导读 (1)
文档反馈