本文介紹Linux執行個體設定核心參數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,導致核心在收到未知的不可屏蔽中斷髮生Panic,出現執行個體重啟現象。
核心參數 kernel.unknown_nmi_panic用於控制核心在遇到未知的不可屏蔽中斷(Non Maskable Interrupt,簡稱NMI)時的行為。目前大多數Linux發行版本上kernel.unknown_nmi_panic 的值均設為0,即忽略未知的不可屏蔽中斷。如果由於某些原因開啟了該配置,可能導致核心在收到未知的不可屏蔽中斷髮生Panic,並出現執行個體重啟的情況。
kernel.unknown_nmi_panic = 1:核心將在遇到未知的不可屏蔽中斷時,認為系統出錯並觸發核心Panic,從而導致執行個體出現非預期的重啟或業務中斷。kernel.unknown_nmi_panic = 0:忽略該問題不做進一步處理,保持執行個體目前狀態繼續運行。
解決方案
您可以參考以下方法進行處理,將核心參數kernel.unknown_nmi_panic的值設定為0,忽略未知的不可屏蔽中斷。
登入ECS執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
執行以下命令,查看是否存在核心參數
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內容。sudo sh -c "echo >> /etc/sysctl.conf" sudo sh -c "echo 'kernel.unknown_nmi_panic = 0' >> /etc/sysctl.conf"
執行以下命令,使配置在當前環境中生效。
sudo sysctl -p說明如果需要額外修改核心參數,並且不希望重新載入核心參數設定檔,請執行
sysctl -w kernel.unknown_nmi_panic=0命令,只修改核心參數kernel.unknown_nmi_panic的值為0。