最近有一些老的dell机器总是莫名其妙的系统就没有反应了,查案日志系统却发现什么都没有记录,记录的只是启动后的日志,通过监控系统发现在系统在没有反应前cpu、内存、负载、流量都很正常,就是突然没有响应了,排查起问题来很难搞,偶然发现了kdump这个工具,这是一个可信赖的内核崩溃转储工具。下面简单介绍一下该工具:

kexec是一个快速启动机制,允许通过已经运行的内核的上下文启动一个Linux内核,不需要经过BIOS。BIOS可能会消耗很多时间,特别是带有众多数量的外设的大型服务器。这种办法可以为经常启动机器的开发者节省很多时间。Kexec是实现kdump机制的关键,它包括2个组成部分:一是内核空间的系统调用kexec_load,负责在生产内核(production kernel 或 first kernel)启动时将捕获内核(capture kernel或sencond kernel)加载到指定地址。二是用户空间的工具kexec-tools,他将捕获内核的地址传递给生产内核,从而在系统崩溃的时候能够找到捕获内核的地址并运行。没有kexec就没有kdump。先有kexec实现了在一个内核中可以启动另一个内核,才让kdump有了用武之地。

kdump是一种先进的基于kexec的内核崩溃转储机制。当系统崩溃时,kdump使用kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于kdump利用kexec启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。kdump需要两个不同目的的内核,生产内核和捕获内核。生产内核是捕获内核服务的对像。捕获内核会在生产内核崩溃时启动起来,与相应的ramdisk一起组建一个微环境,用以对生产内核下的内存进行收集和转存。注意,在启动时,kdump保留了一定数量的重要的内存,为了计算系统需要的真正最小内存,加上kdump使用的内存数量,以决定真正的最小内存的需求。

kexec和kdump的设计区别:

的设计是用新内核去覆盖原内核位置;而KDUMP是预留一块内存来加载第二个内核(和相关数据),Crash后第二个内核在原位置运行(不然就达不到相关目的了),收集第一个内核的相关内存信息。

下面开始试验kdump特性:

操作系统:ubuntu 12.10(3.5.0-17-generic)

安装kdump工具

apt-get install kexec-tools crash   发现安装过程中修改了grub,在引导内核配置上(/boot/grub/grub.cfg)多了如下参数

crashker nel=384M-2G:64M,2G-:128M   crashkernel用来指定保留内存的大小,我们可以知道crashkernel帮我们设定的保留区域的大小是:如果内存小于384M,不保留内存;如果内存大于等于384M但小于2G,保留64M;如果内存大于2G,保留128M。

修改kdump配置文件(/etc/default/kdump-tools)

USE_KDUMP=1 下载dbgsym文件,改文件是用来吊事内核信息的文件

wagt 'http://ddebs.ubuntu.com/pool/main/l/linux/linux-image-3.5.0-17-generic-dbgsym_3.5.0-17.28_amd64.ddeb'

dpkg -i linux-image-3.5.0-17-generic-dbgsym_3.5.0-17.28_amd64.ddeb   重启机器使配置生效。

启动kdump-tools

/etc/init.d/kdump-tools start

Starting kdump-tools: setup_linux_vesafb: 1280x1024x32 @ d9800000 +500000

* loaded kdump kernel

kdump-tools配置(kdump-config show):

USE_KDUMP: 1

KDUMP_SYSCTL: kernel.panic_on_oops=1

KDUMP_COREDIR: /var/crash

crashkernel addr: 0x2e000000

current state: ready to kdump

kernel link:

/usr/lib/debug/boot/vmlinux-3.5.0-17-generic

kexec command:

/sbin/kexec -p --command-line="BOOT_IMAGE=/boot/vmlinuz-3.5.0-17-generic root=UUID=9386113e-a6db-4a1c-9565-8c8c1de4a55a ro irqpoll maxcpus=1 nousb" --initrd=/boot/initrd.img-3.5.0-17-generic /boot/vmlinuz-3.5.0-17-generic

可以通过sysrq强制系统崩溃。

echo ‘c’ > /proc/sysrq-trigger

这造成内核崩溃,如配置有效,系统将重启进入kdump内核,当系统进程进入到启动 kdump服务的点时,(dump.时间戳文件)将会拷贝到你在kdump配置文件中设置的位置。ubuntu的缺省目录是:/var/crash/时间戳文件夹。然后系统重启进入到正常的内核。一旦回复到正常的内核,就可以在上述的目录下发现dump文件,即内存转储文件。可以使用之前安装的crash工具来进行分析。

生成dump文件后/var/crash的目录结构:

├── 201305061817

│   ├── config_link -> /boot/config-3.5.0-17-generic

│   ├── dump.201305061817

│   ├── kernel_link -> /usr/lib/debug/boot/vmlinux-3.5.0-17-generic

│   └── system.map_link -> /boot/System.map-3.5.0-17-generic

├── config_link -> /boot/config-3.5.0-17-generic

├── kernel_link -> /usr/lib/debug/boot/vmlinux-3.5.0-17-generic

├── kexec_cmd

└── system.map_link -> /boot/System.map-3.5.0-17-generic   ump.201305061817就是生成的dump文件,后面的一串数字诶当时的时间戳。

接下来用crash进行分析

crash /usr/lib/debug/boot/vmlinux-3.5.0-17-generic dump.201305061817 出现如下错误提示:

crash: cannot resolve: "xtime",此时crash的版本为5.1.6,版本太低,调试不了3.5的内核,需要升级crash,可以手动安装crash。最新版为6.1,可以调试到3.6的内核。参照:

http://people.redhat.com/anderson/

参考:

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

http://www.ibm.com/developerworks/cn/linux/l-cn-dumpanalyse/?

http://manpages.ubuntu.com/manpages/natty/man5/kdump-tools.5.html

http://hi.baidu.com/gpstrive/item/68929aa083f69416a9cfb773

http://bbs.chinaunix.net/thread-1919319-1-1.html????

linux kdump保存的目录,Linux kdump相关推荐

  1. linux kdump保存的目录,linux kdump搭建

    本文将以centos系统为例,说明kdump的配置. 什么是kdump kdump 是一种crash dump捕获机制,用来捕获kernel crash时候产生的crash dump. kdump需要 ...

  2. linux安装手动划分目录,Linux目录配置整理

    FHS: 为了规范各种Linux发行版的目录配置方法和目录定义而制定了FHS规范. 在FHS规范的Linux中,所有的文件和目录都由根目录开始,即"/",它是所有文件和目录的起点. ...

  3. linux输入法软件安装目录,Linux下的文件管理与汉语输入法的安装

    #1.文件管理命令 **touch **:新建文件,修改文件时间戳 命令 用处 touch file file1 file2- 创建file file1 file2等空文件 touch file 将文 ...

  4. linux java的安装目录,linux java 安装目录

    linux java 安装目录 [2021-02-01 05:04:30]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...

  5. linux交换分区的目录,linux 下的交换分区及根目录

    linux下的分区情况 Linux下的交换分区 Linux系统中的Linux交换分区是当物理内存(RAM)被充满时,作为物理内存的缓存来使用.当系统需要更多的内存资源,而物理内存已经充满,内存中不活跃 ...

  6. linux终端转到目录,linux下目录及终端学习

    linux目录按调用分为相对路径与绝对路径 相对路径:从当前路径下查找查找目标也可使用./调用当前目录下文件或者../调用上一层目录中文件,可通过pwd查看当前路径 绝对路径:从根目录出发查找文件. ...

  7. linux下挂载共享目录,linux mount挂载共享目录详解

    linux mount挂载共享目录详解 这里有新鲜出炉的 Linux 常用命令,程序狗速度看过来! Linux Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 ...

  8. Linux用户密码信息存储目录,Linux用户目录

    Linux用户信息常用目录 用户信息 cat /etc/passwd root:x:0:0:root:/root:/bin/bash 账户名:密码:UID:GID(基本组):(可选)描述:家目录绝对路 ...

  9. 初学者linux查找文件安装目录,Linux查看软件安装目录及位置 方法

    对Linux了解的朋友都知道,在linux中软件一般默认都是安装在到"/usr/share"和"/usr/local"这两个路径下.但是:如果我们需要查看软件安 ...

最新文章

  1. Java语言程序设计实验指导_《java语言程序设计》上机实验指导手册(4).doc
  2. 处理增删改_这10个批量处理的PPT技巧,让你的效率提升100倍!
  3. 根据您的命令-命令设计模式
  4. java事件编程_java基础 ---Swing事件编程
  5. 使用MJRefresh自定义下拉刷新,上拉加载动画
  6. C语言的面向对象设计-对X264/FFMPEG架构探讨
  7. 申通完美支撑“双11”——亿级包裹背后的云基础设施
  8. 博客园随笔添加自己的版权信息 [转]
  9. vue.js tutorial for beginner [Is it possible for us to learn vue.js in a minute?]
  10. 【英语学习】【English L06】U04 Adventure L3 The city playground and some famous museums
  11. Teamcenter 2007之错误信息提示
  12. linux ios文件是否存在,技术|如何在 Linux 中验证 ISO 镜像
  13. 网站项目建设流程概述
  14. python函数手册 chm_python中文手册chm
  15. Redis的安装教程(Windows+Linux)【超详细】
  16. selenium 各浏览器driver下载地址
  17. #51CTO学院四周年#一路前行,一路陪伴
  18. ORB-SLAM 全文翻译
  19. 京东开源FaceX-Zoo:PyTorch面部识别工具箱
  20. 将连续生产参数与四班三运转班次对应起来的算法

热门文章

  1. 高薪程序员面试题精讲系列83之MySQL如何查重和去重?如何分页?
  2. 斯皮尔曼spearman相关系
  3. 快速理解宽带调频中的贝塞尔函数
  4. html多国语言配置方法,jquery多国语言切换特效
  5. CMD命令大全,你知道的和不知道的都有,非常实用,C++中system的用法 (史上最详细)
  6. 网络表示初学习--节点嵌入 node embedding
  7. 关于LaunchScreen.storyboard启动设置(包含不同设备适配)
  8. 原创 | 投影坐标系6位和8位的区别(GIS)
  9. 常见程序的数据库链接文件
  10. WIFI 信号强度是怎么划分的