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

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 可以高效捕获内核崩溃现场,为故障分析提供可靠数据。建议定期测试转储流程,确保其可用性。

http://www.xdnf.cn/news/4067.html

相关文章:

  • archlinux安装waydroid
  • 查看并升级Docker里面Jenkins的Java17到21版本
  • 双目测量中的将视差图重投影成三维坐标图
  • 某信服EDR3.5.30.ISO安装测试(二)
  • kotlin 03flow-stateFlow和sharedFlow企业中使用
  • 青听音乐 1.0.6| 全网音乐免费听,无损下载,4条音源,界面简洁无广告
  • Nacos源码—3.Nacos集群高可用分析一
  • 【QT】QT中的软键盘设计
  • C# 方法(局部函数和参数)
  • [前端]异步请求的竞态问题
  • 代码随想录第34天:动态规划7(打家劫舍问题:链式、环式、树式房屋)
  • STA中的multi_cycle 和false_path详细讨论
  • macOS 上是否有类似 WinRAR 的压缩软件?
  • Qt6.8中进行PDF文件读取和编辑
  • LeetCode:返回倒数第k个结点
  • MyBatis 一对多与多对一映射详解教程
  • macbook install chromedriver
  • 百度golang开发一面
  • SpringBoot集成CXF框架,实现WebService
  • 2025系统架构师---论面向对象的软件设计
  • Python字符串全面指南:从基础到高级操作
  • 计算机视觉与深度学习 | 点云配准算法综述(1992-2025)
  • Python核心技巧 类与实例:面向对象编程的基石
  • 协程补充---viewModelScope 相关知识点
  • 【计算机视觉】3d人脸重建:3DDFA_V2:实时高精度3D人脸重建与密集对齐技术指南
  • 【NLP】 26. 语言模型原理与概率建模方法详解(Language Models)
  • QT聊天项目DAY08
  • C 语言逻辑运算符:组合判断,构建更复杂的条件
  • Cisco Packet Tracer 选项卡的使用
  • Python中的客户端和服务端交互的基本内容