步骤一:开启 Kdump
1.1 确保 crash 和 kernel-debuginfo 两个软件包已安装
# rpm -qa | grep crash || dnf install crash ; rpm -qa | grep kernel-debug || dnf install kernel-debug
1.2 给 Kdump 分配保留内存
1.2.1 通过在 /etc/default/grub 配置文件里修改 crashkernel 参数
# vim /etc/default/grub
在这一行里:
GRUB_CMDLINE_LINUX_DEFAULT="......"
添加:
GRUB_CMDLINE_LINUX_DEFAULT="...... crashkernel=auto"
(
补充:这里的 auto 代表系统会根据内存大小自动设置一个值,也可以指定一个值,例如:crashkernel=128M,high、crashkernel=256M,high 等等。如果设置成一个固定值,建议
1) 1 GB 到 4 GB 内存设置成 160 M
2) 4 GB 到 64 GB 内存设置成 192 M
3) 64 GB 到 1 TB 内存设置成 256 M
4) 大于 1 TB 内存设置成 512 M
)
1.2.2 让刚刚修改的内核参数生效
# grub2-mkconfig -o /boot/grub2/grub.cfg;reboot
1.2.3 显示给 Kdump 预留内存的大小
# makedumpfile --mem-usage /proc/kcore
步骤二:触发 Kdump 内核奔溃
# echo 1 > /proc/sys/kernel/sysrq
# echo c > /proc/sysrq-trigger
步骤三:分析 KDUMP 生成的内核奔溃信息
3.1 进入存放 KDUMP 内核奔溃信息的目录
# cd /var/crash/<date>/
3.2 解析 KDUMP 生成内核崩溃信息
# crash vmlinux-2.6.32.12-0.7-default vmcore
(补充:这里以使用 2.6.32.12-0.7-default 版本的 kernel-debuginfo 解析为例)
3.3 确认生成了 vmlinux-2.6.32.12-0.7-default.gz 压缩包
# ls vmlinux-2.6.32.12-0.7-default.gz
(注意:如果这里生成了 vmlinux-2.6.32.12-0.7-default.gz 压缩包的话,这里会有 vmlinux-2.6.32.12-0.7-default.gz 信息的显示)
(补充:这里以确认 2.6.32.12-0.7-default 版本的 kernel-debuginfo 生成的压缩包为例)
3.4 解压 vmlinux-2.6.32.12-0.7-default.gz 压缩包
# gzip -d vmlinux-2.6.32.12-0.7-default.gz
(补充:这里以解压 2.6.32.12-0.7-default 版本的 kernel-debuginfo 生成的压缩包为例)
3.5 分析 KDUMP 生成的内核奔溃信息
(步骤略)
参考文献:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/analyzing-a-core-dump_managing-monitoring-and-updating-the-kernel