曙光信息产业(北京)有限公司I文件编号:文件名:Kdump和Crash的配置方法与内核故障原因分析保密级别:核心资料授权给:曙光信息产业(北京)有限公司在职员工Kdump和Crash的配置方法与内核故障原因分析作者:侯雪峰单位:曙光信息产业(北京)有限公司部门:解决方案中心日期:20130520关键词:Kdump、Crash、kernelpanic曙光信息产业(北京)有限公司II对本文档的任何使用均被视为完全理解并接受本文档列举的所有法律条款。2.本文档的所有权利归作者所有,作者保留所有权利。3.若本文档的保密级别为“公开发布”,允许学术使用,未经作者书面授权,禁止商业使用。若本文档的保密级别为“内部资料”,仅授权曙光信息产业(北京)有限公司的在职员工使用。若本文档的保密级别为“核心资料”,未经作者书面授权,禁止任何形式的使用。4.对本文档的使用形式包括但不限于存储、出版、复制、传播、展示、引用、编辑。使用过程中不得对本文档作任何增减编辑,引用时需注明出处。商业使用是指在商业活动中或有商业目的活动中的使用。学术使用是指以技术交流或学术研究为目的的使用。5.实施任何侵权行为的法人或自然人都必须向作者支付赔偿金,赔偿金计算方法为:赔偿金=涉案人次×涉案时长(天)×涉案文档份数×受众人次×基数×1元人民币,涉案人次、涉案时长、涉案文档份数、受众人次小于1时,按1计算。若保密级别为“公开发布”,基数为100;若保密级别为“内部资料”,基数为1000;若保密级别为“核心资料”,基数为10000.6.对举报侵权行为、提供有价值证据的自然人或法人,作者承诺奖励案件实际赔偿金的50%.7.作者不保证文档内容的正确性。对文档的使用后果,作者不承担任何责任。8.涉及本文档的法律纠纷由作者所在地法院裁决。9.本文档所列举法律条款的最终解释权归作者所有。曙光信息产业(北京)有限公司III;侯雪峰;创建文件。曙光信息产业(北京)有限公司IV的安装配置(以RHEL6.2为例)....................................................................................13Crash简介......................................................................................................................................24Crash的配置和初步使用..............................................................................................................25使用Crash分析内核崩溃的原因................................................................................................45.1实际分析示例一:............................................................................................................55.2实际分析示例二:............................................................................................................95.3实际分析示例三:..........................................................................................................125.4实际分析示例四:..........................................................................................................135.5实际分析示例五:..........................................................................................................145.6实际分析示例六:..........................................................................................................165.7实际分析示例七:..........................................................................................................186结论............................................................................................................................................19曙光信息产业(北京)有限公司1摘要:本文介绍了Kdump和Crash的配置方法,并通过Crash对内存镜像转储文件做了一些分析,推断和研究了系统发生故障的原因。1Kdump简介Linux的内核十分稳定,但仍不可避免地会遇到崩溃的情况,获取内核崩溃时的内存镜像,有助于分析系统在崩溃前发生了什么,分析原因并修复错误,进而改进系统的稳定性。Kdump用于对内存镜像的转储,它不但可以转储内存镜像到本地硬盘,还可以将内存镜像通过NFS,SSH等协议转储到不同机器的设备上。Kdump分为两个组件:Kexec和Kdump。Kexec是一种内核的快速启动工具,可以使新的内核在正在运行的内核(生产内核)的上下文中启动,而不需要通过耗时的BIOS检测,方便内核开发人员对内核进行调试。Kdump是一种有效的内存转储工具,启用Kdump后,生产内核将会保留一部分内存空间,用于在内核崩溃时通过Kexec快速启动到新的内核,这个过程不需要重启系统,因此可以转储崩溃的生产内核的内存镜像。2Kdump的安装配置(以RHEL6.2为例)1.在安装操作系统时会提示是否启用Kdump,选择启用,并设置保留的内存大小(一般建议设置为128M)。2.如安装系统时禁用了Kdump,可按照下面步骤操作:rpm-qa|grepkexec-tools#查看是否安装了kexec工具,如没有安装需要装好在/boot/grub/grub.conf文件中添加内核参数:crashkernel=auto(或者指定使用内存的大小,如crashkernel=128M)3.配置Kdump的一些参数:kdump默认将文件存放在本地硬盘的/var/crash/目录下,该位置可以是本地文件系统的某个目录,或者某个块设备,或者通过网络存储在其他机器上,可以修改文件:vim/etc/kdump.conf#raw/dev/sda5(如果写到裸设备上,取消该行的注释)#ext4/dev/sda3(指定写入设备的文件系统类型和分区)#ext4LABEL=/boot(支持LABEL以及UUID来标识设备)#ext4UUID=03138356-5e61-4ab3-b58e-27507ac41937曙光信息产业(北京)有限公司2:/export/tmp(NFS方式)#netuser@my.server.com(SSH方式)#path/var/crash(内存镜像文件的保存路径)#core_collectormakedumpfile-c--message-level1-d31此行设置保存内存镜像内容的级别,-c表示使用makedumpfile压缩数据,--message-level1表示提示信息的级别(1表示只显示进度信息)-d31表示不复制所有可以去掉的内存页(包括zeropage,cachepage,cacheprivate,userdata,freepage等)。#defaultshell此行表示如果kdump转储内存镜像失败后的执行的动作,默认为挂载根文件系统并执行/sbin/init进程,可以更改为:reboot,halt,poweroff,shell等。例如,如果将内存镜像通过SSH协议转储到集群中管理节点挂载的共享存储上,并按最大的压缩内容保存,如果失败,则重启机器,放弃转储内存镜像,则/etc/kdump.conf文件可以配置为:netroot@adminpath/var/crashcore_collectormakedumpfile-c--message-level1-d31defaultreboot4.将kdump服务设置为开机自启动:chkconfigkdumpon/etc/init.d/kdumpstart5.可使用一下命令触发内核的崩溃,并检验Kdump是否配置成功,如成功,会在指定目录下生成内核镜像文件:echo1/proc/sys/kernel/sysrqechoc/proc/sysrq-trigger系统将会进入内存转储过程,完成后会重启到生产内核。3Crash简介Crash是由DavidAnderson开发维护的分析内存转储文件的工具,目前最新版本为7.0.0,RHEL6.2集成的版本为crash-5.1.8-1,它可以分析多种工具产生的内存转储文件。4Crash的配置和初步使用首先确保操作系统安装了一下rpm包:rpm–ivhkernel-debuginfo-common-x86_64-2.6.32-220.el6.x86_64.rpmrpm-ivhkernel-debuginfo-2.6.32-220.el6.x86_64.rpm曙光信息产业(北京)有限公司3分析内存转储文件;crash/var/crash/127.0.0.1-2013-04-02-13\:47\:32/vmcore/usr/lib/debug/lib/modules/2.6.32-220.el6.x86_64/vmlinux其中第一个参数为某次崩溃产生的内存转储文件,第二个参数为带有调试信息的内核。进入Crash后显示的信息一般如下图所示:Crash常用的命令有如下几个:help#查看命令的帮助信息,也可用man命令h#查看历史命令,相当于shell下的historylog#该命令用于打印出内存的日志信息bt#该命令用于获取当前线程的调用堆栈foreachbt#该命令用于获取所有线程的调用堆栈ps#该命令用于查看内核崩溃时的进程信息vm#该命令用于查看当