Kdump和Crash工具
Kdump和Crash简介
Kdump为Linux内核设计的内核转储工具。Kdump的核心实现基于Kexec,Kexec全称是Kernel execution,即内核执行,类似于Linux内核中的exec系统调用。Kexec可以快速启动一个新的Linux内核,他会跳过BIOS或者bootloader等引导程序的初始化阶段。这个特性可以让系统崩溃时快速切换到此内核进行信息手机和转储。
Crash是 Red Hat Enterprise Linux工程师开发的,和Kdump配套使用的一个用于分析内核转储文件的工具。Kdump的工作流程不复杂。Kdump会在内存中保留一块区域,这个区域用来存放捕获内核。当生产内核在运行过程中遇到崩溃等问题时,Kdump会通过Kexec机制自动启动捕获内核,跳过BIOS,以免破坏了生产内核的内存,然后再把生产内核的完整信息(包括CPU寄存器、栈数据等)转储到指定文件中。接着,使用Crash工具来分析这个转储文件,以快速定位宕机问题。
Kdump和Crash的安装和配置
安装
yum install kexec-toolscrash
安装完成后需要修改grub文件
GRUB_CMDLINE_LINUX="rd.lvm.lv=cl/root rd.lvm.lv=cl/swap crashkernel=512M"
给捕获内核预留512MM内存。
重新生成grub配置文件,是配置生效。
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
开启Kdump服务
systemctl start kdump.service //启动
systemctl enable kdump.service //设置开机启动
使用service kdump status可以查看服务状态
快速测试
echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger
如果配置正确,上述命令会让系统快速启动并且启动捕获内核进行转储。
转储完成会自动切换会生产内核。在进入生产内核中,查看/var/crash目录中是否生成对应coredump目录。
目录包含vmcore和vmore-dmesg.txt两个文件,其中vmcore是捕获内核转储文件,另一个是生产内核发生崩溃时生成的内核日志信息。
在使用Crash工具进行分析之前,需要安装生产内核对应的调试信息的内核符号表。可以通过如下方式来安装。添加一个调试信息的源。在/etc/yum.repos.d/目录下新建一个文件,如CentOS-Debug.repo,并在文件中编写:
</etc/yum.repos.d/CentOS-Debug.repo>
#Debug Info
[debug]
name=CentOS-$releasever - DebugInfo
baseurl=****debuginfo.centos***/$releasever/$basearch/
gpgcheck=0
enabled=1
接下来安装kernel-debuginfo软件包
yum install -y kernel-debuginfo-$(uname -r)
安装完成之后,带调试符号信息的内核在/usr/lib/debug/lib/modules/目录下。打来Crash工具进行分析:
crash [vmcore] [vmlinux]
vmcore:转储的内核文件,通常在/var/crash目录下
vmlinux:带调试内核符号信息的内核映像,通常在/usr/lib/debug/lib/modules/目录下。