Centos7/RHEL7 开启kdump

翻译 2017年12月18日 16:58:28
  • 437

原文链接《How to enable Kdump on RHEL 7 and CentOS 7》

Kdump是一种基于kexec的Linux内核崩溃捕获机制,简单来说系统启动时会预留一块内存,当系统崩溃调用命令kexec(kdump kernel)在预留的内存中启动kdump内核,
该内核会将此时内存中的所有运行状态和数据信息收集到一个coredump文件中以便后续分析调试。

本文介绍如何在Centos7/RHEL7 开启kdump。

步骤1 安装kexec-tools

  1. [vagrant@localhost ~]$ yum install kexec-tools

步骤2 设置crashkernel预留内存大小

  1. [vagrant@localhost ~]$ cat /etc/default/grub
  2. GRUB_TIMEOUT=5
  3. GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
  4. GRUB_DEFAULT=saved
  5. GRUB_DISABLE_SUBMENU=true
  6. GRUB_TERMINAL_OUTPUT="console"
  7. GRUB_CMDLINE_LINUX="<span margin: 0px; padding: 0px; border: currentColor; color: rgb(0, 0, 0); font-weight: 400; box-sizing: border-box; background-color: inherit;">color:#ff0000;">crashkernel=256M</span> rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
  8. GRUB_DISABLE_RECOVERY="true"
修改crashkernel的大小,我的系统内存是1G,保留了256M,注意预留内存大小,过小会导致生成coredump文件失败(不知道设置多少时,可以尝试每次增加128M)
修改后还需重新生成grub配置文件,重启系统才能生效
  1. [vagrant@localhost ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
  2. [vagrant@localhost ~]$ reboot
步骤3 修改kdump默认配置/etc/kdump.conf
centos7 默认已安装kdump,根据需要修改默认配置
  1. [vagrant@localhost ~]$ vi /etc/kdump.conf
  2. #指定coredump文件存储位置
  3. path /var/crash
  4. #增加-c参数,代表压缩coredump文件
  5. core_collector makedumpfile -c -l --message-level 1 -d 31
  6. #生成coredump后,重启系统,
  7. default reboot
步骤4 开启kdump服务
  1. [vagrant@localhost ~]$ systemctl start kdump.service //启动kdump
  2. [vagrant@localhost ~]$ systemctl enable kdump.service  //设置开机启动
步骤5 测试kdump功能
检查kdump是否开启成功
  1. [vagrant@localhost ~]$ service kdump status
  2. Redirecting to /bin/systemctl status kdump.service
  3. ● kdump.service - Crash recovery kernel arming
  4. Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
  5. Active: active (exited) since Mon 2017-12-18 09:12:56 UTC; 43min ago
  6. Process: 913 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)
  7. Main PID: 913 (code=exited, status=0/SUCCESS)
  8. CGroup: /system.slice/kdump.service
  9. [vagrant@localhost ~]$ systemctl is-active kdump.service
  10. active
手动触发crush
  1. [root@cloud ~]# echo 1 > /proc/sys/kernel/sysrq ; echo c > /proc/sysrq-trigger
如果没有问题,系统会自动重启,重启后可以看到在/var/crash/目录下生成了coredump文件
  1. [vagrant@localhost ~]$ ls /var/crash/
  2. 127.0.0.1-2017-12-18-08:25:11
步骤6 安装crash,分析coredump文件
  1. [vagrant@localhost ~]$ yum install crash
  1. [vagrant@localhost ~]$ crash /var/crash/127.0.0.1-2017-12-18-08\:25\:11/vmcore /usr/src/kernels/linux-`uname -r`/vmlinux
输入问号”?“,查看crash支持的命令
  1. crash> ?
  2. *              files          mach           repeat         timer
  3. alias          foreach        mod            runq           tree
  4. ascii          fuser          mount          search         union
  5. bt             gdb            net            set            vm
  6. btop           help           p              sig            vtop
  7. dev            ipcs           ps             struct         waitq
  8. dis            irq            pte            swap           whatis
  9. eval           kmem           ptob           sym            wr
  10. exit           list           ptov           sys            q
  11. extend         log            rd             task
比如log命令,可以看到系统crash时的打印信息
  1. [  470.018926] CPU: 0 PID: 1490 Comm: iwconfig Tainted: GF          O 3.10.69 #1
  2. [  470.019251] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
  3. [  470.019603] task: ffff880039406ae0 ti: ffff880035d1c000 task.ti: ffff880035d1c000
  4. [  470.019931] RIP: 0010:[<ffffffff8129d3cd>]  [<ffffffff8129d3cd>] memcpy+0xd/0x110
  5. [  470.020419] RSP: 0018:ffff880035d1dc38  EFLAGS: 00010206
  6. [  470.020697] RAX: ffff88003dba3508 RBX: ffff8800362eb400 RCX: 1ffffffffffffffc
  7. [  470.021218] RDX: 0000000000000006 RSI: 000000000000001a RDI: ffff88003dba3508
  8. [  470.021735] RBP: ffff880035d1dc88 R08: 0000000000016320 R09: ffff88003dba34c0
  9. [  470.022917] R10: 0000000000000000 R11: ffff880035d1d9c6 R12: ffff8800341a3280
  10. [  470.023437] R13: ffffc90000226104 R14: ffffffffffffffe2 R15: ffff88003dba34c0
  11. [  470.023958] FS:  00007ff662ec1740(0000) GS:ffff88003fc00000(0000) knlGS:0000000000000000
  12. [  470.024725] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
  13. [  470.025223] CR2: 000000000000001a CR3: 0000000038f6a000 CR4: 00000000000406f0
  14. [  470.025775] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
  15. [  470.026334] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

kdump 的使用在linux崩溃时的更多相关文章

  1. Linux崩溃时启动脚本获取进程相关信息

    编写test.cpp #include <stdlib.h> #include <stdio.h> #include <exception> #include &l ...

  2. 让linux中的程序崩溃时生成core文件

    当我们的linux程序崩溃的时候,常常会有这样的提示:    Segmentation fault (core dumped)    段错误 (核心已转储)    提示说生成了core文件,但是此功能 ...

  3. 编写的windows程序,崩溃时产生crash dump文件的办法

    一.引言 dump文件是C++程序发生异常时,保存当时程序运行状态的文件,是调试异常程序重要的方法,所以程序崩溃时,除了日志文件,dump文件便成了我们查找错误的最后一根救命的稻草.windows程序 ...

  4. 获取崩溃时的调用栈和生成dump文件,然后自动重启

    首先要说明的是:  linux 下 比较方便可以得到 崩溃时的调用栈,win下 比较难办   1. linux 获取调用栈 代码奉上: #include <execinfo.h> //在头 ...

  5. golang程序因未知错误崩溃时如何记录异常

    开发服务器程序时如果未经过充分测试, 服务稳定运行一段时间后会突然崩溃退出.一般是因为程序中出现了某个未捕获的异常. 这类问题属于偶现的,且需要服务器运行一段时间之后才会出现,难以定位有问题的代码段. ...

  6. 如何在.NET程序崩溃时自动创建Dump?

    今天在浏览张队转载文章的留言时,遇到一个读者问了这样的问题,如下图所示: 首先能明确的一点是"程序崩溃退出了是不能用常规的方式dump的",因为整个进程树都已经退出.现场已经无法使 ...

  7. Linux安装时内存如何分区的相关问题

    Linux系统安装时内存如何分区:Linux系统必须的分区是根分区(/)和swap交换分区.普通用户一般分三个区,一个根分区(/),一个家目录(home分区),一个交换分区(swap分区),以80G的 ...

  8. Linux系统安装时分区的选择(推荐)

    Linux系统安装时分区的选择(推荐)  出处:http://www.cnblogs.com/gylei/archive/2011/12/04/2275987.html 前言: 以前初识Linux时, ...

  9. IIS崩溃时自动抓取Dump

    背景:在客户现场,IIS有时会崩溃,开发环境没法重现这个bug,唯有抓取IIS的崩溃是的Dump文件分析. IIS崩溃时自动抓取Dump,需要满足下面几个条件 1.启动 Windows Error R ...

随机推荐

  1. 使用CSS实现自定义input[checkbox]样式

    思路:使用label上的for熟悉,与checkbox上的id相对应来达到点击选中效果,在使用伪元素,或者其他元素,定位至checkbox上方,替代checkbox,并且隐藏checkbox,使用CS ...

  2. SecureCRT的一些问题解决

    按下退格键发送删除命令 设置缓冲 拷贝与粘贴 多标签切换   ctrl + tab . 如果同时按下shift,可以方向切换

  3. GSM模块_GPRS数据传输机制和原理

    通信专业术语 BSS--基站子系统,通过无线接口与移动台直接联系,负责在一定区域内和移动台通信.(GSM) BTS--基站收发台,可以看作一复杂的无线调制器,BSS的主要部分,每个分配有若干信道.(G ...

  4. 一起來玩鳥 Starling Framework(8)BitmapFont

    所謂BitmapFont,就是事先將我們會用到的字型,會用到的字,輸出成一張圖片,類似Sprite sheet,以及一個xml格式的Data file,然後我們一次將這文字圖片轉成Texture,up ...

  5. 修改git的author 和 commiter

    点击:Add Entry

  6. vlan 介绍

    简介      在Linux中安装了802.1Q标签VLAN功能.VLAN是虚拟分配以太网的功能. 使用VLAN ID从物理上将一个以太网分割开.在VLAN环境下,具有相同VLAN ID 就可以相互通 ...

  7. mui.ajax返回type为abort

    最近在使用h5和mui开发app,发现mui.ajax有一个小bug 情况一: 参数和请求路径无误,但是总是调起失败的回调函数,打印出 type=abort (终止请求) 原因: mui.ajax默认 ...

  8. java 线程的几种状态(转载)

      java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明: NEW 状态是指线程刚创建, 尚未启动 RUNNABLE 状态是线程正在 ...

  9. C语言-字符串操作函数

    gets(char buffer[]) 从标准输入读取一行, 并去掉换行符, 在字符串末尾增加 '\0' 字符, 写入到缓冲区 成功则返回 buffer 的地址, 出错或者遇到文件结尾则返回空指针, ...

  10. Pushlet后台推送

    1.Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模型:客户端发送请求,订阅感兴趣的事件:服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的 ...