1.什么是kdump?
kudmp是一种基于kexec的内核崩溃转储技术。其需要两个内核,分别是生产内核和捕获内核。生产内核是捕获内核服务的对象,且保留了内存的一部分给捕获内核启动使用。当系统崩溃时,kdump使用kexec启动捕获内核,对生产内核下的内存进行收集和转存。 运维人员可以通过对kdump转储文件的分析来定位内核崩溃的原因。
2.操作步骤
2.1安装并配置kdump-tool
- 执行
yum install kdump-tools crash kexec-tools makedumpfile -y
命令,安装kdump工具。 - 依次执行以下命令配置kdump kernel
vim /etc/default/grub
将grub文件中的GRUB_CMDLINE_LINUX="crashkernel=auto..."中的auto修改为128M
sudo grub2-mkconfig -o /boot/grub2/grub.cfg //更新grub配置
reboot //重启实例,或通过控制台界面重启实例
vim /etc/kdump.conf //修改kdump默认配置
将配置文件中的以下内容进行修改:
path /var/crash #指定coredump文件放在/var/crash文件夹中
core_collector makedumpfile -c -l -message-level 1 -d 31 #加上-c表示压缩,原文件中没有
default reboot #生成coredump后,重启系统
2.2依次执行以下命令开启kdump-tool工具
systemctl start kdump.service //启动kdump
systemctl enable kdump.service //设置开机启动
service kdump status //查看kdump状态,出现如下图所示图显,则表明kdump安装成功
3.验证kdump是否可用
- 依次执行以下命令,手动触发crash:
echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger
若kdump可用,则在执行完上述命令后系统将自动重启,并在/var/crash目录下生成如下图所示内容:
4.查看分析dump文件
- 执行以下命令,下载crash工具:
https://crash-utility.github.io/ //下载地址,下载完成后通过工具传至实例内部
sudo apt-get install libaio-dev libncurses5-dev zlib1g-dev liblzma-dev flex bison byacc //进行解压前需要先安装工具,避免后续步骤出现问题
tar -xf crash-7.2.4.tar.gz //解压缩
cd crash-7.2.4/
make target=arm64 //进行编译安装
- 可以通过carsh工具来读取dump文件重要内容,具体操作命令如下:
crash 目标目录 目标文件 //进入crash命令行
bt //查看函数调用栈
log //查看内核dmesg日志
struct //查看函数数据结构
rd //读取内存内容
dis //进行反汇编,查看对应地址的代码逻辑
ps //查看线程状态
kmem //查看内核内存使用情况
help //其他命令,可以通过help来学习查看
如果您有其他问题,欢迎您联系火山引擎技术支持服务。