kdumpcrash - OpenCloudOS Documentation

十二月 18, 2024 更新: 二月 25, 2025 [Linux 与系统] #Linux #obsidian #发行版 #存储与文件系统 #调试

1. 简介

kdump作为linux系统关键的问题定位调测技术,默认安装并激活(Anaconda安装时也已默认勾选kdump)。

2. kdump安装

查看确认kdump状态:

systemctl status kdump.service

如果显示active,则说明kdump服务处于激活状态:

● kdump.service - Crash recovery kernel arming
     Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
     Active: active (exited)

如果在安装时禁用了kdump,则可以通过以下步骤安装、激活kdump服务:

sudo dnf install kexec-tools
sudo systemctl start kdump.service
sudo systemctl status kdump.service

3. kdump配置

kdump的配置主要有3部分。

配置预留内存 预留内存是为了在系统crash时crashkernel能正常工作而预留的内存,与物理内存大小以及系统实际使用的物理内存大小都有关系。一般的,物理内存越大、被使用的物理内存越多,需要为crashkernel预留更多的内存。 如果kdump服务状态正常,但发生crash时没成功生成crash core,则就要考虑预留是否内存不足导致kdump工作异常。

kexec-tools软件包的kdump安装脚本根据不同的架构给出不同的配置,可以看到不同的物理内存大小设置不同的预留内存值:

if [[ $_arch == "x86_64" ]] || [[ $_arch == "s390x" ]]; then
        _ck_cmdline="1G-4G:192M,4G-64G:256M,64G-:512M"
    elif [[ $_arch == "aarch64" ]]; then
        _ck_cmdline="2G-:448M"

修改该配置,可以通过kdumpctl estimate命令估算crashkernel预留内存值,可能不准确,可作为设置适当的crashkernel预留内存值的参考。

sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX="i8042.noaux quiet console=ttyS0,115200 console=tty0 crashkernel=512M-64G:256M,64G-128G:512M,128G-:768M biosdevname=0 net.ifnames=    0 intel_idle.max_cstate=1 intel_pstate=disable"

重新生成grub配置文件:

sudo grub2-mkconfig -o /boot/efi/EFI/opencloudos/grub.cfg

或者使用grubby来设置:

sudo grubby --update-kernel ALL --args "crashkernel=自定义值”

设置后,需要reboot来使配置生效。配置转储目标 crashkernel将已经发生crash的内核的内存等信息转储出来,以供后续的分析定位,转储相关的设置在配置文件 /etc/kdump.conf中。

默认以文件形式转储在本地文件系统目录/var/crash中,并进行了内存过滤、压缩存储:

path /var/crash
core_collector makedumpfile -l --message-level 7 -d 31

内存过滤、压缩存储的详细信息可以通过man makedumpfile查看。kdump内核配置 crashkernel启动时的命令行参数在配置文件 /etc/sysconfig/kdump中。 设置后,通过如下命令来配置生效:

sudo systemctl restart kdump.service

4. 测试kdump配置

通过如下命令触发内核crash确认kdump配置正常:

su - root
echo c > /proc/sysrq-trigger

系统重启后,在配置的转储目录( /var/crash)下可以看到生成的vmcore文件以及vmcore-dmesg.txt等日志文件。## 5. crash

vmcore生成后,可以通过crash工具进行解析、定位问题。

5.1 安装

安装crash工具:

sudo dnf install crash

解析vmcore文件,需要有调试符号表文件,系统安装的内核一般都去除了调试符号,因此需要安装调试符号表文件。

sudo dnf debuginfo-install kernel
file /usr/lib/debug/lib/modules/$(uname -r)/vmlinux
/usr/lib/debug/lib/modules/6.1.26-2303.1.0.ocs23.x86_64/vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=cc33cfbef9122f72d0ebbec283ebf6ffcfe9c06e, with debug_info, not stripped

5.2 运行crash工具

运行crash工具需要2个参数:带调试符号表的内核和vmcore文件。

sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux vmcore

进入crash后,可以执行help命令查看crash支持的命令:

crash> help

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

crash version: 8.0.2-3.ocs23   gdb version: 10.2
For help on any command above, enter "help <command>".
For help on input options, enter "help input".
For help on output options, enter "help output".

通过man crash了解更多信息。