通過crash_kexec_post_notifiers參數配置解決系統未產生vmcore檔案的問題

更新時間:
Copy as MD

本文以Alibaba Cloud Linux 3系統為例,介紹了通過配置crash_kexec_post_notifiers參數來解決系統未產生vmcore檔案的問題。

作業系統限制

  • Alibaba Cloud Linux 3

  • Anolis OS 8.x

問題現象

當系統發生Paniccrash_kexec_post_notifiers參數值為Y時,沒有產生vmcore檔案。

問題原因

當系統發生Paniccrash_kexec_post_notifiers參數值為Y時,當前Panic核心跳轉到kdump核心之前將執行Panic Notifiers,這些Notifiers函數出現錯誤導致無法產生vmcore(例如Notifiers引發了死結)。

說明
  • Panic

    指作業系統遇到一個嚴重的、無法安全恢複的錯誤時所採取的一種緊急措施。

  • Panic Notifiers

    Linux核心中的一個機制,它允許註冊的模組或者系統組件在核心發生嚴重錯誤(導致Panic)並即將重啟或跳轉到kdump核心前執行特定的回呼函數用來執行一些資源清理、故障資訊記錄(比如寫入日誌)、系統狀態收集等操作。

  • kdump

    Linux系統中用於提高系統可靠性和故障排查能力的重要組件。

  • vmcore

    Linux系統中,核心崩潰時通過核心的崩潰轉儲機制產生的一個記憶體映像檔案。

解決方案

  1. 查看kdump服務狀態。

    sudo kdumpctl status

    回顯資訊說明如下:

    • 回顯資訊為kdump: Kdump is operational,表示服務正常運行。

    • 回顯資訊為kdump: Kdump is not operational,表示服務未運行,啟動kdump服務。

      sudo kdumpctl start
  2. 系統Panic後,查看是否產生vmcore

    <ip-time>需替換為存放vmcore的檔案夾名,例如127.0.0.1-2024-10-11-15:46:52

    ls /var/crash/<ip-time>

    未產生vmcore:關閉crash_kexec_post_notifiers觀察是否產生vmcore

    • 臨時關閉crash_kexec_post_notifiers配置。

      sudo sh -c 'echo N > /sys/module/kernel/parameters/crash_kexec_post_notifiers'
    • 持久化關閉crash_kexec_post_notifiers配置。

      1. 關閉crash_kexec_post_notifiers配置。

        sudo grubby --update-kernel="/boot/vmlinuz-$(uname -r)" --args="crash_kexec_post_notifiers=N"
      2. 重啟ECS執行個體,使配置生效。

        警告

        重啟執行個體將導致您的執行個體暫停運行,這可能引發業務中斷和資料丟失。因此,建議您在執行此操作之前備份關鍵資料,並選擇在非業務高峰期進行。

        sudo reboot
  3. 若關閉crash_kexec_post_notifiers還未產生vmcore,則可能由於其他原因導致該問題,需要通過kdumpctl工具排查具體原因。具體操作,請參見使用kdumpctl工具查看核心崩潰轉儲的開機記錄