Kdump介绍
分析操作系统crash或hang的原因,需要用到kernel dump。Linux系统用来捕捉kernel dump的工具是kdump。
kdump的原理是启动一个特殊的dump-capturekernel把系统内存里的数据保存到文件里,为什么需要一个特殊的dump-capturekernel呢?因为原来的kernel已经出问题了,发生crash或hang了。
Dump-capture kernel既可以是独立的,也可以与系统内核集成在一起–这需要硬件支持relocatablekernel才行。在X86_64系统上RHEL6/7和SLES11/12缺省都是与系统内核集成在一起的。
kdump工作的过程
系统内核启动的时候,要给dump-capture kernel预留一块内存空间。
内核启动完成后,kdump service执行 kexec -p 命令把dump-capture kernel载入预留的内存里。
如果系统发生crash,会自动reboot进入dump-capture kernel,dump-capturekernel只使用自己的预留内存,确保其余的内存数据不会被改动,它的任务是把系统内存里的数据写入到dump文件,比/var/crash/vmcore,为了减小文件的大小,它会通过makedumpfile(8)命令对内存数据进行挑选和压缩。
dump文件写完之后,dump-capture kernel自动reboot。
使用
1、查看是否安装kexec-tools服务
rpm -qa |grep kexec-tools
没有安装使用yum install kexec-tools命令安装服务。
2、查看kdump服务状态。
systemctl status kdump
3、查看kerenlcrash,修改预留的内存。
dmesg |grep crashkernel
4、如果反馈是auto那么根据需求修改预留内存512M或768M。
vim /etc/default/grub
5、更新grub
grub2-mkconfig -o /boot/grub2/grub.cfg
6、重启系统,查看kdump服务。
reboot
systemctl status kdump
测试宕机
1、执行模拟宕机
echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger
2、查看是否生成日志
cd /var/crash/