Centos7/RHEL7 开启kdump

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

步骤1 安装kexec-tools

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

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

复制代码
[vagrant@localhost ~]$ cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=" ( s e d ′ s , r e l e a s e . ∗ (sed 's, release .* (seds,release.,g’ /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=“console”
GRUB_CMDLINE_LINUX=“crashkernel=256M rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet”
GRUB_DISABLE_RECOVERY=“true”
复制代码

修改crashkernel的大小,我的系统内存是1G,保留了256M,注意预留内存大小,过小会导致生成coredump文件失败(不知道设置多少时,可以尝试每次增加128M)
修改后还需重新生成grub配置文件,重启系统才能生效
[vagrant@localhost ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
[vagrant@localhost ~]$ reboot

步骤3 修改kdump默认配置/etc/kdump.conf
centos7 默认已安装kdump,根据需要修改默认配置
复制代码
[vagrant@localhost ~]$ vi /etc/kdump.conf
#指定coredump文件存储位置
path /var/crash
#增加-c参数,代表压缩coredump文件
core_collector makedumpfile -c -l --message-level 1 -d 31
#生成coredump后,重启系统,
default reboot
复制代码

步骤4 开启kdump服务
[vagrant@localhost ~]$ systemctl start kdump.service //启动kdump
[vagrant@localhost ~]$ systemctl enable kdump.service //设置开机启动

步骤5 测试kdump功能
检查kdump是否开启成功
复制代码
[vagrant@localhost ~]$ service kdump status
Redirecting to /bin/systemctl status kdump.service
● kdump.service - Crash recovery kernel arming
Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2017-12-18 09:12:56 UTC; 43min ago
Process: 913 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)
Main PID: 913 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/kdump.service
[vagrant@localhost ~]$ systemctl is-active kdump.service
active
复制代码

手动触发crash
[root@cloud ~]# echo 1 > /proc/sys/kernel/sysrq ; echo c > /proc/sysrq-trigger

如果没有问题,系统会自动重启,重启后可以看到在/var/crash/目录下生成了coredump文件
[vagrant@localhost ~]$ ls /var/crash/
127.0.0.1-2017-12-18-08:25:11

步骤6 安装crash,分析coredump文件
[vagrant@localhost ~]$ yum install crash

[vagrant@localhost ~]$ crash /var/crash/127.0.0.1-2017-12-18-08:25:11/vmcore /usr/src/kernels/linux-uname -r/vmlinux

输入问号”?“,查看crash支持的命令
复制代码
crash> ?

* files mach repeat timer
alias foreach mod runq tree
ascii fuser mount search union
bt gdb net set vm
btop help p sig vtop
dev ipcs ps struct waitq
dis irq pte swap whatis
eval kmem ptob sym wr
exit list ptov sys q
extend log rd task

复制代码

比如log命令,可以看到系统crash时的打印信息
复制代码
[ 470.018926] CPU: 0 PID: 1490 Comm: iwconfig Tainted: GF O 3.10.69 #1
[ 470.019251] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[ 470.019603] task: ffff880039406ae0 ti: ffff880035d1c000 task.ti: ffff880035d1c000
[ 470.019931] RIP: 0010:[] [] memcpy+0xd/0x110
[ 470.020419] RSP: 0018:ffff880035d1dc38 EFLAGS: 00010206
[ 470.020697] RAX: ffff88003dba3508 RBX: ffff8800362eb400 RCX: 1ffffffffffffffc
[ 470.021218] RDX: 0000000000000006 RSI: 000000000000001a RDI: ffff88003dba3508
[ 470.021735] RBP: ffff880035d1dc88 R08: 0000000000016320 R09: ffff88003dba34c0
[ 470.022917] R10: 0000000000000000 R11: ffff880035d1d9c6 R12: ffff8800341a3280
[ 470.023437] R13: ffffc90000226104 R14: ffffffffffffffe2 R15: ffff88003dba34c0
[ 470.023958] FS: 00007ff662ec1740(0000) GS:ffff88003fc00000(0000) knlGS:0000000000000000
[ 470.024725] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 470.025223] CR2: 000000000000001a CR3: 0000000038f6a000 CR4: 00000000000406f0
[ 470.025775] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 470.026334] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
复制代码
20210621

一、调试环境准备

使用crash工具分析vmcore,需要:

  1. crash工具
  2. 崩溃转储文件(vmcore)
  3. 发生崩溃的内核映像文件(vmlinux),包含调试内核所需调试信息

我们需要下载带有完整调试信息的内核映像文件(编译时带-g选项),内核调试信息包kernel-debuginfo有两个:

kernel-debuginfo
kernel-debuginfo-common

对于centos系统,可以在http://debuginfo.centos.org/上下载到各发行版本所需的调试包。
对于centos7.x,安装对应内核版本的内核调试包,执行如下即可:

wget http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-common-x86_64-uname -r.rpm

wget http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-uname -r.rpm

注意:如果系统为centos6.x,则将debuginfo.centos.org/后面的7改成6即可。

对于oracle linux系统,可以在https://oss.oracle.com/上下载内核调试包,比如现在要找oracle linux6.6的:

wget https://oss.oracle.com/ol6/debuginfo/kernel-uek-debuginfo-3.8.13-44.1.1.el6uek.x86_64.rpm

wget https://oss.oracle.com/ol6/debuginfo/kernel-uek-debuginfo-common-3.8.13-44.1.1.el6uek.x86_64.rpm

下载完后,安装内核调试包:

rpm -ivh kernel-debuginfo-*.rpm

安装完成后,可以在/lib/debug/lib/modules/3.10.0-957.el7.x86_64/(或者是/usr/lib/…下面)目录下看到vmlinux内核映像文件:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值