kdump详解

kdump 是 Linux 系统中的一种内核崩溃转储机制,用于在系统崩溃时将内存中的数据保存到磁盘上,以便后续分析系统崩溃的原因。以下是对 kdump 的详细介绍:

1、工作原理

kdump 利用了 Linux 系统中的双启动机制。当系统启动时,它会加载两个内核:

  • 正常运行的生产内核;
  • 用于捕获崩溃信息的 kdump 内核。

在系统运行过程中,kdump 会监控生产内核的状态。当生产内核发生崩溃时,kdump 会接管系统,并将生产内核的内存映像保存到指定的转储设备中。

保存完成后,系统可以重新启动,管理员可以通过分析内存转储文件来查找系统崩溃的原因。

2、组件

  • kexec:kexec 是一个用于在 Linux 系统中加载和启动新内核的工具。kdump 使用 kexec 来加载 kdump 内核,并在生产内核崩溃时切换到 kdump 内核。
  • crashkernel:crashkernel 是预留的一块内存区域,用于在系统崩溃时存储内核的内存映像。kdump 会将生产内核的内存数据复制到 crashkernel 中,然后再将其保存到转储设备中。
  • systemd-coredump:systemd-coredump 是 systemd 中的一个组件,用于处理内核崩溃转储文件。它会在系统崩溃时被触发,并将内存转储文件保存到指定的位置。

3、配置步骤

1)安装 kdump 工具

在大多数 Linux 发行版中,可以使用包管理工具来安装 kdump 工具,如在 CentOS 中可以使用yum install kexec-tools命令安装。

# Debian/Ubuntu
sudo apt install kexec-tools kdump-tools crash
# CentOS/OpenEuler
sudo yum install kexec-tools crash kernel-debuginfo

2)配置 crashkernel 参数

需要在系统的引导配置中添加crashkernel参数,以预留内存给 kdump 使用。例如,crashkernel=128M表示预留 128MB 的内存。

修改 GRUB 配置(如 /etc/default/grub),添加 crashkernel 参数:

GRUB_CMDLINE_LINUX="crashkernel=256M quiet"

更新 GRUB 并重启:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

3) 配置转储设备

可以指定将内存转储文件保存到本地磁盘、网络存储或其他设备中。需要在/etc/kdump.conf文件中配置转储设备的路径。

如果没有特别配置 kdump,当发生 crash 时,通常默认会将 vmcore 保存到 /var/crash 路径下,也可以查看 /etc/kdump.conf 配置来确认:

$ grep ^path /etc/kdump.conf
path /var/crash

4)启用 kdump 服务

安装和配置完成后,需要启用 kdump 服务,使其在系统启动时自动运行。例如,在 CentOS 中可以使用systemctl enable kdump.service命令启用服务。

验证 kdump 状态

  • 检查保留内存是否生效:

    $ grep crashkernel /proc/cmdline
    BOOT_IMAGE=/boot/vmlinuz-3.10.0-327.ali2019.alios7.x86_64 root=UUID=a0172e4b-bc83-4244-994c-6f73e18ea1ee ro crashkernel=auto console=ttyS0,115200 LANG=en_US.UTF-8 fsck.repair=yes net.ifnames=0 console=tty0 console=ttyS0,115200n8
    
  • 查看服务状态:

    systemctl status kdump

4 /etc/kdump.conf 配置详解

参考:/etc/kdump.conf 配置详解-CSDN博客

5、触发与捕获转储

1)手动触发内核崩溃

echo c > /proc/sysrq-trigger

系统将重启,并在配置目录生成 vmcore 或 dump 文件。

2)自动捕获场景
kdump 可自动响应以下事件:

  • 内核 panic

  • 硬件错误(如 NMI)

  • 用户通过 SysRq 触发崩溃7。

6、内存转储文件分析

1)分析工具

内存转储文件包含了系统崩溃时的内存状态、内核堆栈信息、进程列表等重要信息。可以使用专门的工具来分析这些文件。

debuginfo调试符号工具:

参考:debuginfo详解-CSDN博客

Crash分析工具

crash分析案例:

crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/[timestamp]/vmcore

crash工具参考:linux crash工具详解-CSDN博客

GDB 分析
适用于进程级崩溃分析:

gdb -c vmcore /path/to/vmlinux

2)分析转储文件

通过分析内存转储文件,管理员可以找出系统崩溃的原因,如内核漏洞、驱动问题、硬件故障等。这有助于快速定位和解决问题,提高系统的稳定性和可靠性。

7、优势与局限性

优点

  • 提供详细的故障信息:kdump 能够在系统崩溃时捕获到非常详细的内存信息,包括内核数据结构、进程状态等,这对于准确分析系统崩溃原因非常有帮助。
  • 方便调试:内存转储文件可以在离线状态下进行分析,无需在故障现场进行调试,方便管理员在有条件的环境下进行深入分析。
  • 支持多种平台:kdump 支持多种硬件平台和 Linux 发行版,具有较好的通用性和兼容性。

局限性

  • 占用内存和磁盘空间:kdump 需要预留一定的内存作为 crashkernel,并且内存转储文件可能会占用大量的磁盘空间,尤其是在系统内存较大的情况下。
  • 分析难度较大:内存转储文件包含了大量的信息,分析这些文件需要一定的专业知识和经验,对于普通用户来说可能有一定的难度。
  • 不能解决所有问题:kdump 只能在系统崩溃后提供故障信息,对于一些间歇性的故障或性能问题,可能无法提供有效的帮助。

8、注意事项

内存预留大小
建议根据系统内存调整 crashkernel 参数(如 1G-4G 内存保留 192M,4G-64G 保留 256M)。

调试符号兼容性
需确保 vmlinux 文件与转储文件的内核版本完全一致,否则分析可能失败。

生产环境谨慎操作
手动触发崩溃会导致系统重启,需在维护窗口执行。

多架构支持
x86 和 ARM 架构的保留内存配置可能不同,需参考具体硬件文档。

9、适用场景

  • 内核崩溃分析:定位驱动或硬件兼容性问题。

  • 进程级调试:通过 core dump 分析用户态程序崩溃。

  • 远程故障排查:将转储文件传输至其他设备分析,减少对生产环境的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RGB三原色

本文来源 : 腾讯元宝 ​​RGB三原色(红绿蓝)详解​​ RGB(Red, Green, Blue)是光学的三原色,通过不同比例的混合可以产生人眼可见的绝大多数颜色。它是现代显示技术(如屏幕、投影仪&#xff09…

CSS兼容性:挑战与策略

CSS兼容性:挑战与策略 引言 在前端开发的广阔领域中,跨浏览器兼容性无疑是最棘手且难以预测的挑战之一。当我们精心设计的网页在Chrome中完美呈现,却在Safari中布局崩溃,或在Firefox中交互失效时,这种挫折感是每位前…

[ 设计模式 ] | 单例模式

单例模式是什么?哪两种模式? 单例模式就是一个类型的对象,只有一个,比如说搜索引擎中的索引部分,360安全卫士的桌面悬浮球。 饿汉模式和懒汉模式:饿汉模式是线程安全的,懒汉模式不是线程安全的…

Notebook.ai 开源程序是一套工具,供作家、游戏设计师和角色扮演者创建宏伟的宇宙 - 以及其中的一切

​一、软件介绍 文末提供程序和源码下载 Notebook.ai 开源程序是一套工具,供作家、游戏设计师和角色扮演者创建宏伟的宇宙 - 以及其中的一切。 二、软件特点 Notebook 是作家的规划工具,用于创建从宇宙到角色、情节到单个项目的任何内容。通过浏览器、…

centos7.0无法安装php8.2/8.3

在centos安装php8.2报错 configure: error: *** A compiler with support for C17 language features is required. 配置过程检测到你的系统编译器不支持 C17 语言特性,而 PHP 8.2 的编译需要编译器支持 C17 sudo yum update -y sudo yum install centos-releas…

Three.js + React 实战系列 - 客户评价区细解教程 Clients 组件✨(回答式评价 + 评分星级)

对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!! 在这篇博客中,我们将实现一个简洁的 Hear from My Clients 客户评价区域。这个区块在个人主页中可以突显用户体验和专业度,帮…

Vim 命令从头学习记录

学习链接:eleon-vim基础教程 Vim - 基础翻屏操作 光标移动:hjkl 20j 向下移动20行,w 向后移动一个字符,b 向前移动一个字符。 Ctrl u 向上翻半页 UP Ctrl d 向下翻半页 Down Ctrl f 向下翻整页 Forward Ctrl b 向上翻整页 …

Linux系统编程--基础指令(!!详细讲解+知识拓展)

第一讲 基础指令 ​ 我们现如今自己使用的电脑大部分是用的都是windows或者macOS,并配合上由微软和苹果开发的图形化界面,所以使用鼠标再屏幕上进行点击即可完成许多任务。但是作为操作系统的学习者,在linux的基础上不再使用图形化界进行操作…

ADK 第四篇 Runner 执行器

智能体执行器 Runner,负责完成一次用户需求的响应,是ADK中真正让Agent运行起来的引擎,其核心功能和Agents SDK中的Runner类似,具体作用如下: 会话管理:自动读取/写入 SessionService,维护历史信…

【Tauri2】37——后端处理invoke

目录 前言 正文 随便看看 看看get 看看parse_invoke_request 看看message_handler 看看handle_ipc_message 看看webview的on_message方法 第一种情况的处理 第二种情况的处理 运行通信函数 返回的处理 整个流程 前言 【Tauri2】033 __TAURI_INTERNALS__和invoke-C…

kotlin 05flow -从 LiveData 迁移到 Kotlin Flow 完整教程

一 从 LiveData 迁移到 Kotlin Flow 完整教程 LiveData 长期以来是 Android 架构组件中状态管理的核心,但随着 Kotlin Flow 的成熟,Google 官方推荐将现有 LiveData 迁移到 Flow。本教程基于官方文章并扩展实践细节,完成平滑迁移。 一、为什…

C++负载均衡远程调用学习之获取主机信息功能

目录 01Lars-lbAgentV0.2-赋值均衡数据结构关系分析 02 Lars-lbAgent0.2-host_info-load_balance-route_lb数据结构的定义 03Lars-lbAgentV0.2-proto协议的定义 04 Lars-lbAgentV0.2-route_lb与UDP server的关联 05 -Lars-lbAgentV0.2-route_lb与UDP server的关联 06Lars…

2025系统架构师---论软件的设计模式论文

2023 年,我所在的公司承担了某部网络靶场的研发任务。我作为公司的技 术总监,希望能打造基于网络靶场的系列产品,参与到项目的设计中,以期开发 扩展性和可维护性良好的网络靶场,为以后的产品开发打下基础。网络靶场是网 络安全技术研究的基础支撑平台,它利用虚拟的和实物…

Kubernetes排错(七)-节点排错

1、节点 Crash 与 Vmcore 分析 kdump 介绍​ 目前大多 Linux 发新版都会默认开启 kdump 服务,以方便在内核崩溃的时候, 可以通过 kdump 服务提供的 kexec 机制快速的启用保留在内存中的第二个内核来收集并转储内核崩溃的日志信息(vmcore 等文件), 这种机制需要服务…

【QT】QT中的软键盘设计

QT的软键盘设计 1.软键盘制作步骤2.介绍有关函数的使用3.出现的编译错误及解决办法示例代码1:按键事件实现软键盘现象:示例代码2:按键事件实现软键盘(加特殊按键)现象: 软键盘移植到新的工程的步骤&#xf…

【LaTeX+VSCode本地Win11编译教程】

LaTeXVSCode本地编译教程参考视频: LaTeXVSCode本地编译教程 下面提供一种Win11的Latex环境配置和设置方案,首先vscode安装参考博客:【VscodeGit教程】,然后准备安装Latex相关组件 在 https://miktex.org/download 下载 miktex 并…

2025五一杯数学建模ABC题赛题已出

2025五一杯数学建模ABC题赛题已出 A: B: C:

Springclound常用五大组件及其使用原理

注册中心Eureka Eureka-Server:就是服务注册中心(可以是一个集群),对外暴露自己的地址。 提供者:启动后向Eureka注册自己信息(地址,服务名称等),并且定期进行服务续约 …

Docker —— 隔离的基本操作(2)

Docker —— 隔离的基本操作(2) unshareunshare 命令详解基本语法常用选项常用示例实际应用场景注意事项与 Docker 的关系1. 执行命令2. 修改主机名3. 退出命名空间4. 验证宿主机主机名关键原理类比 Docker 容器总结 实战操作一(PID 隔离&…

Java List分页工具

PageUtil.java import com.google.common.collect.Lists; import com.jd.platform.hotkey.dashboard.common.domain.Page; import org.springframework.util.CollectionUtils;import java.util.ArrayList; import java.util.List;public class PageUtil {/*** 通用分页工具类*…