kdump初探

来源:互联网 发布:实时监测网速软件 编辑:程序博客网 时间:2024/05/16 12:12

介绍:

kdump有两个部分:kdump和kexec


kdump是一种内核的crash dump机制,在内核crash之后可以捕获内存中的数据,用来后续进行分析崩溃原因。

kdump需要配置两个kernel,分别为standard(production)kernel和crash(capture)kernel。前一个是生产用的正式kernel,而后一个是用来捕获生产kernel崩溃时内存信息的kernel。

当第一个内核崩溃时,第二个内核被加载到第一个内核的位置并启动。然后就从这个新启动内核的上下文获取崩溃转储数据。这样就使整个系统具有了高可靠性。


kexec最初是用来快速启动系统的,它可以通过正在运行内核的的上下文来启动系统,而无需经过BIOS。由于BIOS需要耗费大量时间,而kexec跳过了系统重启过程中最耗时的部分,即固件部分,所以使用kexec自然就为需要频繁启动系统的工作节约了大量时间。kexec启动用于kdump来捕获内核时绕过了BIOS也使第一个内核的内存得以保留。



实验操作:

1、安装相关的包。

重要的软件包括:

kdump

kexec-tools

kernel-debuginfo

在Fedora19直接使用yum安装,可能会提示找不到软件包。原因是yum默认的源中debuginfo的enabled为0。将其改为1即可。或者直接使用官方wiki中的方式

# yum install --enablerepo=fedora-debuginfo --enablerepo=updates-debuginfo kexec-tools crash kernel-debuginfo
安装完成后记得启动服务

# systemctl start kdump.service

ps:此方法可能安装较高版本的kernel-debuginfo,可能会不能用。如果不行的话卸载掉,仍然使用yum源Fedora-debuginfo默认的地址安装即可,不要用updates包中的



2、配置grub

在启动参数中加入

crashkernel=

的内容,有多种写法,包括

crashkernel = x@y   x是为dump捕获内核保留的内存,y是保留部分内存的开始位置

crashkernel= 512M-2G:64M,2G-:128M 物理内存不足512M时,不分配内存给kdump;物理内存为512M至2G时,分配64M;物理内存大于2G后分配128M


内存分配成功后内核启动后就会输出下列信息:

# dmesg
Reserving 128M of memory at 32MB for crashkernel


ps:grub2启动参数配置

grub2的启动参数与grub配置不同。grub可以直接在文件中修改,而grub2需要编辑文件 

# vi /etc/default/grub

/etc/default/grub

之后在GRUB_CMDLINE_LINUX后面添加需要的参数。完成后保存退出,执行命令

# grub2-mkconfig -o /boot/grub2/grub.cfg


3.触发崩溃(使用sysrq-c方式)

# echo c > /proc/sysrq-trigger


系统会自动触发崩溃,之后转到crash kernel,进行内核的捕获。捕获完成后会自动重启。重启后生成文件/var/crash/127.0.0.1-2014.07.12-23:32:28/vmcore,这就是接下来可以分析的dump file


# crash vmcore vmlinux




参考资料:

1.Fedora wiki:How to use kdump to debug kernel crashes   https://fedoraproject.org/wiki/How_to_use_kdump_to_debug_kernel_crashes

2.kdump学习小结  http://www.360doc.com/content/12/0321/22/7982302_196442500.shtml

3.http://www.ibm.com/developerworks/cn/linux/l-kexec/

4.http://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/index.html

5.linux内核精髓:精通linux内核必会的75个绝技

0 0
原创粉丝点击