Linux Kdump和Crash工具

本文详细介绍了在CentOS/RHEL7系统上配置Kdump和Crash工具的过程,包括安装、设置crashkernel预留内存、修改配置、测试功能、手动触发crash以及使用Crash命令分析内核转储文件,以帮助用户有效诊断和解决内核崩溃问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Kdump 和 Crash 工具介绍

1.1 Kdump

Kdump是一种基于kexec的Linux内核崩溃捕获机制,kexec的全称是Kernel execution,即立即执行,它可以跳过BIOS或者bootloader等引导程序,快速启动一个新的内核。这样第一个内核的内存就得以保留。在第二个内核中可以对第一个内核产生的崩溃数据进行分析。

1.2 Crash

Crash是由Red Hat Enterprise Linux 项目师开发的,和Kdump配套使用的一个用于分析内核转储文件的工具。

Kdump+Crash分析宕机问题的流程并不复杂,首先Kdump会在内存中保留一块区域,这个区域用来存放捕获内核。当生产内核在运行过程中遇到崩溃等情况。Kdump会通过kexec机制自动启动捕获内核,跳过BIOS,以免破坏了生产内核的内存,然后把生产内核的完整信息(包括CPU寄存器,栈数据等)转储到指定文件中。接着使用Crash工具来分析这个转储文件,以快速定位宕机问题。

二、配置kdump和Crash工具

目前大部分服务器基于RHEL或者其开源版本Centos部署,本节介绍如何在Centos中配置和安装Kdump和Crash工具。

2.1 安装kexec-tools

yum install kexec-tools

2.2 设置crashkernel预留内存大小

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=256M"

修改crashkernel的大小,我的系统内存是3G,保留了256M,注意预留内存大小,过小会导致生成coredump文件失败(不知道设置多少时,可以尝试每次增加128M)

修改后还需重新生成grub配置文件,重启系统才能生效

[vagrant@localhost ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
[vagrant@localhost ~]$ reboot
[root@localhost ~]$ cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, 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"

2.3 修改kdump默认配置/etc/kdump.conf

centos7 默认已安装kdump,根据需要修改默认配置

[root@localhost ~]$ vi /etc/kdump.conf
path /var/crash #指定coredump文件存储位置
core_collector makedumpfile -c -l --message-level 1 -d 31 #增加-c参数,代表压缩coredump文件
default reboot #生成coredump后,重启系统

2.4 开启kdump服务

systemctl start kdump.service //启动kdump
systemctl enable kdump.service //设置开机启动

2.5 测试kdump功能 检查kdump是否开启成功

[root@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 Wed 2022-11-16 10:48:09 CST; 18s ago
  Process: 1342 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)
 Main PID: 1342 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/kdump.service
...
Jan 05 11:07:03 localhost.localdomain kdumpctl[1082]: Starting kdump: [OK]
...

如果看到”Starting kdump: [OK]“字样,说明Kdump服务已经成功配置。

2.6 手动触发crash

[root@cloud ~]# echo 1 > /proc/sys/kernel/sysrq ; echo c > /proc/sysrq-trigger

如果Kdump配置正确,上述命令会让系统快速重启并且启动捕获内核以进行转储。

2.7 查看生成的crash文件

[root@localhost ~]# ls /var/crash/
127.0.0.1-2022-11-16-11:11:43

转储完成之后会自动切换回生产内核。在/var/crash目录下存放了对应的coredump目录。(在2.3节中设置了将coredump目录存放在/var/crash中)。该目录是以IP地址和日期来命令的,目录里面包含了vmcorevm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值