通過crash_kexec_post_notifiers參數配置解決系統未產生vmcore檔案的問題
本文以Alibaba Cloud Linux 3系統為例,介紹了通過配置crash_kexec_post_notifiers參數來解決系統未產生vmcore檔案的問題。
作業系統限制
Alibaba Cloud Linux 3
Anolis OS 8.x
問題現象
當系統發生Panic且crash_kexec_post_notifiers參數值為Y時,沒有產生vmcore檔案。
問題原因
當系統發生Panic且crash_kexec_post_notifiers參數值為Y時,當前Panic核心跳轉到kdump核心之前將執行Panic Notifiers,這些Notifiers函數出現錯誤導致無法產生vmcore(例如Notifiers引發了死結)。
Panic
指作業系統遇到一個嚴重的、無法安全恢複的錯誤時所採取的一種緊急措施。
Panic Notifiers
Linux核心中的一個機制,它允許註冊的模組或者系統組件在核心發生嚴重錯誤(導致Panic)並即將重啟或跳轉到kdump核心前執行特定的回呼函數用來執行一些資源清理、故障資訊記錄(比如寫入日誌)、系統狀態收集等操作。
kdump
Linux系統中用於提高系統可靠性和故障排查能力的重要組件。
vmcore
Linux系統中,核心崩潰時通過核心的崩潰轉儲機制產生的一個記憶體映像檔案。
解決方案
查看kdump服務狀態。
sudo kdumpctl status回顯資訊說明如下:
回顯資訊為
kdump: Kdump is operational,表示服務正常運行。回顯資訊為
kdump: Kdump is not operational,表示服務未運行,啟動kdump服務。sudo kdumpctl start
系統
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配置。關閉
crash_kexec_post_notifiers配置。sudo grubby --update-kernel="/boot/vmlinuz-$(uname -r)" --args="crash_kexec_post_notifiers=N"重啟ECS執行個體,使配置生效。
警告重啟執行個體將導致您的執行個體暫停運行,這可能引發業務中斷和資料丟失。因此,建議您在執行此操作之前備份關鍵資料,並選擇在非業務高峰期進行。
sudo reboot
若關閉
crash_kexec_post_notifiers還未產生vmcore,則可能由於其他原因導致該問題,需要通過kdumpctl工具排查具體原因。具體操作,請參見使用kdumpctl工具查看核心崩潰轉儲的開機記錄。