分类: LINUX
2015-07-19 21:39:10
本文将以centos系统为例,说明kdump的配置。
kdump 是一种crash dump捕获机制,用来捕获kernel crash时候产生的crash dump。
kdump需要配置两个不同目的的kernel,其中一个我们在这里称作standard(production) kernel;另外一个称之为crash(capture)kernel。
standard(production)kernel,是指正在使用的kernel,当standard kernel在使用的过程中出现crash的时候, kdump会切换到crash kernel。
简单来说,standard kernel会在运行时发生crash,而crash(capture) Kernel 会被用来捕获production kernel crash时候产生的crash dump。
捕获crash dump是在新的crash(capture)kernel 的上下文中来捕获的,而不是在standard kernel上下文进行。
具体是当standard kernel方式crash的时候,kdump通过kexec(后面介绍)自动启动进入到crashkernel当中。
如果启动了kdump服务,standard kernel会预留一部分内存, 这部分内存用来启动crashkernel。
kdump机制主要包括两个组件:kdump和kexec。
kexec 是一个快速启动kernel的机制,它运行在某一正在运行的kernel中,启动一个新的kernel(这里是crashkernel),而且不用重新经过BIOS就可以完成启动。因为一般BIOS都会花费很长的时间,尤其是在大型并且同时连接许多外部设备的Server上的环境下,BIOS会花费更多的时间。
CONFIG_DEBUG_INFO=Y
CONFIG_CRASH_DUMP=y
CONFIG_PROC_VMCORE=y
CONFIG_KEXEC=y
kdump需要安装kexec-tools-2.0.0-145.el6.x86_64.rpm工具,依赖包如下:
1. busybox-1.15.1-10.el6.x86_64.rpm
2. elfutils-libs-0.148-1.el6.x86_64.rpm
3. kpartx-0.4.9-31.el6.x86_64.rpm
注:以上安装包都在centos6的iso中。
kernel行增加 crashkernel=192M
注:在centos6中crashkernel=xxxM 。在centos5.2中 crashkernel=xxxM@xxM 格式请注意。default=1,表示缺省启动项为第2项(按照 0、1、2...排列)。crashkernel=128M@16M 增加的位置,在kernel 所在的行末尾加,但要放在initrd之前。
配置好grub.conf后重启机器,切换到带有crashkernel参数的内核启动。
默认情况下kdump会将保存的文件保存在/var/crash目录下,可以修改kdump.conf,更改此路径。vmcore的大小与内存有关,所以一定要确保vmcore保存路径空间容量够用。
1. 执行 chkconfig --level35 kdump on
2. 执行service kdump start;显示Kdump is operational表示配置成功。
1. 通过sysrq强制系统崩溃 echo c 〉/proc/sysrq-trigger;
2. 机器会panic重启,等待重启后,正常会在/var/crash 目录下生成一个时间目录里面有vmcore文件;
1. 在服务开启时可能会出现Yourrunning kernel is using more than 70% of the amount of space you reserved forkdump, you should consider increasing your crashkernel reservation 的警告。需要将crashkernel的内存值需要放大即可解决警告信息。
2. 当echo c > /proc/sysrq-trigger时,可能会出现OOM的情况,这个是因为crashkernel的值太小。推荐使用192M,如还出现OOM可继续加大。
3. 在centos6.0的情况下,默认crashkernel=auto。当物理内存小于4G的情况下,这个值不管用,需给出固定的值。