当前位置: 首页 > news >正文

Kdump 收集器及使用方式

以下是 Linux 系统中 Kdump 转储收集器的详细说明及其使用方法,涵盖核心工具、配置方法及实际示例:

一、Kdump 收集器分类及作用

Kdump 的核心功能是通过 捕获内核 生成内存转储文件(vmcore),其核心收集器包括:

收集器/工具作用适用场景
makedumpfile默认核心工具,过滤和压缩内存页生成 vmcore生产环境(节省存储空间)
kexec-tools管理内核快速启动(kexec),加载捕获内核所有 Kdump 场景(基础依赖)
crashkernel 参数预留内存供捕获内核使用内核启动配置(必需)
自定义脚本通过 pre/post 钩子扩展功能(如加密、上传云存储)高级场景(自动化处理)

二、核心收集器配置与使用

1. makedumpfile

作用:生成转储文件时过滤无关内存页(如零页、缓存),并支持压缩。

配置方法/etc/kdump.conf):
# 指定过滤掩码(-d)和压缩算法(-c/-l)
core_collector makedumpfile -l --message-level 1 -d 31

过滤掩码(-d

  • 1: 过滤零页

  • 2: 过滤缓存页

  • 4: 过滤私有缓存页

  • 8: 过滤用户进程页

  • 16: 过滤空闲页

示例-d 31(1+2+4+8+16)过滤所有非关键页。

压缩选项

  • -c: zlib 压缩

  • -l: lzo 压缩(更快,压缩率较低)

  • -p: snappy 压缩(需内核支持)

手动执行
# 直接生成转储文件(需指定内存设备)
makedumpfile -l -d 31 /proc/vmcore /path/to/vmcore
2. kexec-tools

作用:快速加载捕获内核,绕过 BIOS 初始化,确保内存保留。

安装与验证
# 安装(各发行版通用)
sudo apt install kexec-tools   # Debian/Ubuntu
sudo yum install kexec-tools   # CentOS/RHEL# 验证 kexec 是否可用
kexec --version
手动加载捕获内核(调试用):
# 加载捕获内核(需指定内核镜像和初始化内存盘)
kexec -p /boot/vmlinuz-$(uname -r) \
--initrd=/boot/initramfs-$(uname -r).img \
--append="root=/dev/sda1 crashkernel=256M"
3. crashkernel 参数

作用:为捕获内核预留内存,必须在内核启动参数中配置。

修改 GRUB 配置
# 编辑 GRUB 文件(路径因发行版而异)
sudo vim /etc/default/grub# 添加 crashkernel 参数(示例为预留 256MB)
GRUB_CMDLINE_LINUX="... crashkernel=256M quiet"# 更新 GRUB 并重启
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
动态调整(无需重启)
# 调整预留内存(需内核支持)
echo 512M > /sys/kernel/kexec_crash_size

三、存储目标配置示例

通过 /etc/kdump.conf 定义转储文件存储位置:

1. 本地磁盘
# 保存到 ext4 分区
ext4 /dev/sdb1
path /var/crash
core_collector makedumpfile -l -d 17
2. NFS 服务器
# 保存到 NFS 共享目录
nfs 192.168.1.100:/shared/kdump
path /crash_dumps
core_collector makedumpfile -c -d 31
3. SSH 远程存储
# 通过 SSH 传输到远程主机
ssh root@192.168.1.100
sshkey /root/.ssh/kdump_id_rsa
path /remote/crash
4. 加密存储
# 使用加密转储(需内核支持)
core_collector makedumpfile --encrypt AES256 --passphrase-file /etc/kdump.pass

四、触发与验证

1. 手动触发转储
# 触发内核崩溃(立即重启)
echo c > /proc/sysrq-trigger# 或使用专用工具(需安装)
sudo crashme
2. 验证转储文件
# 检查 vmcore 是否生成
ls -lh /var/crash/*/vmcore# 使用 crash 工具解析
crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/*/vmcore

五、高级用法与最佳实践

1. 自动化钩子脚本

在转储前后执行自定义操作:

# 转储前清理旧文件
pre /usr/local/bin/kdump_clean.sh# 转储后上传到云存储
post /usr/local/bin/kdump_upload_s3.sh
2. 多级过滤策略

按需调整过滤规则:

最小转储(仅保留关键数据):

core_collector makedumpfile -d 31 -c

完整转储(调试复杂问题):

core_collector makedumpfile -d 0
3. 资源受限环境优化
  • 小内存系统:减少 crashkernel 预留(最低 128M)。

  • 无持久存储:保存到临时内存盘(raw /dev/ram0)。

六、故障排查

1. 转储失败常见原因
  • 预留内存不足:增大 crashkernel 值(如 512M)。

  • 存储路径权限问题

    chmod 700 /var/crash
  • 服务未启动

    systemctl enable --now kdump
2. 日志分析
# 查看 Kdump 服务日志
journalctl -u kdump# 检查内核日志
dmesg | grep -i kdump

七、总结

工具/配置核心功能关键命令/参数
makedumpfile过滤和压缩转储文件-d <掩码>-c/-l
kexec-tools快速加载捕获内核kexec -p
crashkernel预留内存crashkernel=256M
/etc/kdump.conf定义存储路径、过滤规则和钩子脚本ext4/nfs/sshcore_collector

通过合理配置收集器和存储目标,Kdump 可以高效捕获内核崩溃现场,为故障分析提供可靠数据。建议定期测试转储流程,确保其可用性。

相关文章:

  • 对ubuntu的简单介绍
  • WebRTC 服务器之SRS服务器概述和环境搭建
  • Qwen2_5-Omni-3B:支持视频、音频、图像和文本的全能AI,可在本地运行
  • Linux的时间同步服务器(附加详细实验案例)
  • OpenCV进阶操作:图像直方图、直方图均衡化
  • 【最新Python包管理工具UV的介绍和安装】
  • yolov11 epoch100轮 训练笔记5 kaggle comet
  • HarmonyOS Device Connector(hdc)
  • 基于 HTML 和 CSS 实现的 3D 翻转卡片效果
  • 数据存储——高级存储之PV和PVC
  • 力扣面试150题-- 翻转二叉树
  • ThreadLocal源码深度剖析:内存管理与哈希机制
  • GisWeb实战笔记(1)基于 Vue 3 + Vite + CesiumJS搭建gis开发环境
  • 深入探索Anthropic Claude与Spring AI的融合应用
  • 【STM32单片机】#13 RTC实时时钟
  • 分析strtol(),strtoul()和strtod()三个函数的功能
  • 从网页到桌面:将 Web 应用无缝迁移为 Electron 桌面程序
  • 电赛经验分享——模块篇
  • 定积分的定义式(黎曼和极限定义)
  • 协议(消息)生成
  • 央行行长详解降息:将通过利率自律机制引导商业银行相应下调存款利率
  • “五一”假期银联、网联共处理支付交易234.39亿笔
  • 中标多家学校采购项目的App查成绩需付费?涉事公司回应
  • 科技日报刊文批院士专家“赶场式”跑会:助长浮躁之气功利之心
  • 李公明 | 一周画记:生活就是抵抗
  • 这样喝酸奶相当于在喝糖水,会导致娃龋齿、肥胖