Linux dump作用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用Crash 工具分析Linux dump 文件江卫, 系统工程师, 西艾(广州)软件开发有限公司
简介: Linux 内核由于其复杂性,使得对内核出现的各种异常的追踪变得异常困难。本文将介绍内核中的内存转储机制,以及如何使用crash 工具对内核产生的内存存储文件进行分析。通过对本文的学习,读者可以像专业内核开发者那样去追踪和修复内核的错误。
本文的标签:crash, dump, linux, 使用, 工具分析, 文件
标记本文!
发布日期: 2010 年3 月29 日
级别:中级
访问情况: 8721 次浏览
评论: 0 (查看 | 添加评论 - 登录)
平均分(23个评分)
为本文评分
前言
Linux 内核(以下简称内核)是一个不与特定进程相关的功能集合,内核的代码很难轻易的在调试器中执行和跟踪。开发者认为,内核如果发生了错误,就不应该继续运行。因此内核发生错误时,它的行为通常被设定为系统崩溃,机器重启。基于动态存储器的电气特性,机器重启后,上次错误发生时的现场会遭到破坏,这使得查找内核的错误变得异常困难。
内核社区和一些商业公司为此开发了很多种调试技术和工具,希望可以让内核的调试变得简单。其中一种是单步跟踪调试方法,即使用代码调试器,一步步的跟踪执行的代码,通过查看变量和寄存器的值来分析错误发生的原因。这一类的调试器有gdb,kdb,kgdb。另一种方法是在系统崩溃时,将内存保存起来,供事后进行分析。多数情况下,单步调式跟踪可以满足需求,但是单步跟踪调试也有缺点。如遇到如下几种情况时:
∙错误发生在客户的机器上。
∙错误发生在很关键的生产机器上。
∙错误很难重现。
单步调试跟踪方法将无能为力。对于这几种情况,在内核发生错误并崩溃的时候,将内存转储起来供事后分析就显得尤为重要。本文接下来将介绍内核的内存转储机制以及如何对其进行分析。
回页首内核的内存转储机制
由于Linux 的开放性的缘故,在Linux 下有好几种内存转储机制。下面将对它们分别做简要的介绍。
LKCD
LKCD(Linux Kernel Crash Dump) 是Linux 下第一个内核崩溃内存转储项目,它最初由SGI 的工程师开发和维护。它提供了一种可靠的方法来发现、保存和检查系统的崩溃。LKCD 作为Linux 内核的一个补丁,它一直以来都没有被接收进入内核的主线。目前该项目已经完全停止开发。
Diskdump
Diskdump 是另外一个内核崩溃内存转储的内核补丁,它由塔高(Takao Indoh) 在2004
年开发出来。与LKCD 相比,Diskdump 更加简单。当系统崩溃时,Diskdump 对系统有完全的控制。为避免混乱,它首先关闭所有的中断;在SMP 系统上,它还会把其他的CPU 停掉。然后它校验它自己的代码,如果代码与初始化时不一样。它会认为它已经被破坏,并拒绝继续运行。然后Diskdump 选择一个位置来存放内存转储。Diskdump 作为一个内核
的补丁,也没有被接收进入内核的主线。在众多的发行版中,它也只得到了RedHat 的支持。
Netdump
RedHat 在它的Linux 高级服务器2.1 的版本中,提供了它自己的第一个内核崩溃内存转储机制:Netdump。与LKCD 和Diskdump 将内存转储保存在本地磁盘不同,当系统崩
溃时,Netdump 将内存转储文件通过网络保存到远程机器中。RedHat 认为采用网络方式比采用磁盘保的方式要简单,因为当系统崩溃时,可以在没有中断的情况下使用网卡的论询模式来进行网络数据传送。同时,网络方式对内存转储文件提供了更好的管理支持。与Diskdump 一样,Netdump 没有被接收进入内核的主线,目前也只有RedHat 的发行版对Netdump 提供支持。
Kdump
Kdump 是一种基于kexec 的内存转储工具,目前它已经被内核主线接收,成为了内核的
一部分,它也由此获得了绝大多数Linux 发行版的支持。与传统的内存转储机制不同不同,基于Kdump 的系统工作的时候需要两个内核,一个称为系统内核,即系统正常工作时运
行的内核;另外一个称为捕获内核,即正常内核崩溃时,用来进行内存转储的内核。在本文稍后的内容中,将会介绍如何设置kump。
MKdump
MKdump(mini kernel dump) 是NTT 数据和VA Linux 开发另一个内核内存转储工具,它与Kdump 类似,都是基于kexec,都需要使用两个内核来工作。其中一个是系统内核;
另外一个是mini 内核,用来进行内存转储。与Kdump 相比,它有以下特点:∙将内存保存到磁盘。
∙可以将内存转储镜像转换到lcrash 支持格式。
∙通过kexec 启动时,mini 内核覆盖第一个内核。
回页首各种内存转储分析工具
与具有众多的内存转储机制一样,Linux 下也有众多的内存转储分析工具,下面将会逐一做简单介绍。
Lcrash
Lcrash 是随LKCD 一起发布的一个内内存储分析工具。随着LKCD 开发的停止,lcrash 的开发也同时停止了。目前它的代码已经被合并进入Crash 工具中。
Alicia
Alicia (Advanced Linux Crash-dump Interactive Analyzer,高级Linux 崩溃内存转储交互
分析器) 是一个建立在lcrash 和Crash 工具之上的一个内存转储分析工具。它使用Perl 语言封装了Lcrash 和Crash 的底层命令,向用户提供了一个更加友好的交互方式和界面。Alicia 目前的开发也已经停滞。
Crash