kdump安装及调试策略

发布时间:2024年01月09日

本文基于redhat系的操作系统,debian系不太一样,仅提供参考

1.kdump的部署

注:一般很多操作系统在安装时可默认启动kdump。

(1)需要的包

yum install kexec-tools crash kernel-debuginfo

(2)设置内核启动参数

确保内核参数有“crashkernel=auto”,crashkernel用于设置kdump需要的预留内存的大小,这里将会被kdump服务放入内核,系统崩溃后会启动此处的内核转储/proc/vmcore下的文件到磁盘路径/var/crash下,有如下格式:

crashkernel=X,high //强制使用高端内存,例:crashkernel=1024M,high

crashkernel=X,low //强制使用低端内存,例:crashkernel=256M,low

crashkernel=X@Y //让内核自行选择在X到Y之间大小的内存,例:crashkernel=128M@256M

crashkernel=ramsize-range:size[,...][@offset]?//物理内存大小在ramsize到range范围内让内核选择size到offset大小的预留内存,例:crashkernel=1G-64G:160M@256M

内核参数修改方法可以参见其他博客

(3)开启kdump服务

systemctl enable kdump
systemctl start kdump

(4)测试kdump功能

linux内核提供了一个模拟触发的方法,开启kdump服务后,执行如下命令即可:

echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger

(5)分析转储文件

如果kdump工作正常,在/var/crash目录下会生成一个带有日期的文件夹,其中就存放了转储文件vmcore,可以使用crash解析:

crash /usr/lib/debug/lib/modules/‘对应转储文件的debuginfo内核’/vmlinux /var/crash/‘对应触发时间的文件夹’/vmcore

如果解析成功会出现交互界面,输入命令“bt”可以打印出栈,说明已经可以正常调试了。

2.一些常见kdump问题的处理

(1)kdump服务启动失败

首先查看“/proc/cmdline”中是否设置了crashkernel,如果有再检查kdump的报错:

systemctl status kdump

如果类似如下的日志,特别是“No memory reserved for crash kernel”,说明crashkernel设置的不对,可以尝试调整大小和格式,也可能是内核不支持某些上述格式。

[root@ai66 test_k8s_log]# systemctl status kdump.service 
● kdump.service - Crash recovery kernel arming
   Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2023-11-01 15:24:49 CST; 6 days ago
  Process: 1070 ExecStart=/usr/bin/kdumpctl start (code=exited, status=1/FAILURE)
 Main PID: 1070 (code=exited, status=1/FAILURE)

Nov 01 15:24:49 ai66 systemd[1]: Starting Crash recovery kernel arming...
Nov 01 15:24:49 ai66 kdumpctl[1070]: No memory reserved for crash kernel
Nov 01 15:24:49 ai66 kdumpctl[1070]: Starting kdump: [FAILED]
Nov 01 15:24:49 ai66 systemd[1]: kdump.service: main process exited, code=exited, status=1/FAILURE
Nov 01 15:24:49 ai66 systemd[1]: Failed to start Crash recovery kernel arming.
Nov 01 15:24:49 ai66 systemd[1]: Unit kdump.service entered failed state.
Nov 01 15:24:49 ai66 systemd[1]: kdump.service failed.

文章来源:https://blog.csdn.net/lindorx/article/details/135489412
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。