使用kdumpctl工具查看内核崩溃转储的启动日志

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

kdump是一种为Linux内核提供崩溃转储机制的服务,旨在系统发生崩溃时捕获内存快照(vmcore)。通过该机制,用户能够在系统故障后分析内核崩溃时的状态,以确认导致崩溃的原因。当kdump服务异常时,可能导致内存快照生成失败,此时可以通过kdumpctl工具查看内核崩溃转储的启动日志,以分析kdump服务异常及未生成内存快照的原因,该工具在Alibaba Cloud Linux 3中已默认安装。本文以Alibaba Cloud Linux 3为例,介绍如何使用kdumpctl工具查看内核崩溃转储的启动日志。

使用限制

使用kdumpctl工具查看内核崩溃转储的启动日志时,您的实例配置、镜像及工具需要满足下述要求:

  • 实例内存必须大于2 GB。

  • 实例使用的操作系统必须为Alibaba Cloud Linux 3或Anolis OS 8,且内核版本为5.10.134-14及以上版本。

  • kexec-tools工具的版本应为2.0.25.0.2或更高。

使用说明

您可以按照以下使用说明,通过kdumpctl工具查看内核崩溃转储的启动日志。

  1. 运行以下命令,查看kdump服务状态。

    sudo kdumpctl status

    回显信息说明如下:

    • 回显信息为kdump: Kdump is operational,表示服务正常运行,您可以跳过步骤2,直接执行步骤3

    • 回显信息为kdump: Kdump is not operational,表示服务未运行,您需要执行步骤2,手动启动服务。

  2. (条件可选)运行以下命令,启动kdump服务。

    sudo kdumpctl start

    回显信息如下,表示服务启动成功。

    kdump: kexec: loaded kdump kernel
    kdump: Starting kdump: [OK]
  3. (条件可选)运行以下命令,强制Linux内核崩溃,以便后续查看转储捕获内核启动日志。

    如您的Linux系统在上一次重启操作之后发生过内核崩溃事件,则可以跳过此步骤,直接执行步骤4查看内核崩溃转储的启动日志。

    警告

    强制Linux内核崩溃操作执行后会立刻导致内核崩溃,请勿在生产环境或者正在运行业务的系统上执行此操作,否则会导致系统异常以及服务中断,请谨慎操作。

    echo c | sudo tee /proc/sysrq-trigger
    重要

    执行上述命令后,您当前使用的Linux终端模拟器将无法与该Linux实例进行交互。请重新连接Linux实例后再进行后续操作。

  4. 运行以下命令,查看转储捕获内核启动日志。

    重要

    sudo kdumpctl readlog命令应在内核崩溃引发的内核重启之后执行。该命令所查看的日志存储于内存中,因此在系统重启操作后,会导致日志读取为空。

    sudo kdumpctl readlog

    回显信息示例如下:

    console log: 
    [    0.000000] Linux version 5.10.134-17.2.al8.x86_64 (mockbuild@h87c01383.na61) (gcc (GCC) 10.2.1 20200825 (Alibaba 10.2.1-3.8 2.32), GNU ld version 2.35-12.3.al8) #1 SMP Fri Aug 9 15:49:42 CST 2024
    [    0.000000] Command line: BOOT_IMAGE=(hd0,gpt3)/boot/vmlinuz-5.10.134-17.2.al8.x86_64 ro rhgb cgroup.memory=nokmem spec_rstack_overflow=off vring_force_dma_api kfence.sample_interval=100 kfence.booting_max=0-2G:0,2G-32G:2M,32G-:32M preempt=none biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200n8 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 cryptomgr.notests rcupdate.rcu_cpu_stall_timeout=300 vring_force_dma_api irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off numa=off udev.children-max=2 panic=10 rootflags=nofail acpi_no_memhotplug transparent_hugepage=never nokaslr novmcoredd hest_disable disable_cpu_apicid=0 ramoops.mem_address=0xaf000000 ramoops.mem_size=0x60000 ramoops.console_size=0x48000 ramoops.ttyprobe_size=0x10000 ramoops.ecc=0 ramoops.dump_oops=0 elfcorehdr=3063156K
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'
    
    .........
    ttylog:
    
    Welcome to Alibaba Cloud Linux 3.2104 U10 (OpenAnolis Edition) dracut-049-228.git20230802.0.1.al8 (Initramfs)!
    
    [  OK  ] Listening on udev Kernel Socket.
    [  OK  ] Reached target Timers.
    [  OK  ] Reached target Initrd Root Device.
    [  OK  ] Reached target Local File Systems.
    [  OK  ] Listening on Journal Socket.
    [  OK  ] Started Memstrack Anylazing Service.
    [  OK  ] Reached target Swap.
    [  OK  ] Listening on Journal Socket (/dev/log).
    .........