本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文以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工具查看内核崩溃转储的启动日志。