linux crash tool分析

Linux crash tool 分析与使用

linux crash tool

crash 是一个强大的 Linux 内核崩溃调试工具,常用于分析内核崩溃转储(vmcore 文件)或正在运行的内核。它是基于 GDB 的高级扩展,配合 kexec/kdump 机制可以深入查看崩溃时的内核状态,广泛用于服务器、嵌入式、数据中心内核问题定位。

crash 工具工作原理概览

  1. 基本组成
  • vmcore:内核崩溃时生成的转储镜像文件,由 kdump 生成。
  • vmlinux:带符号表的内核可执行文件(不是 bzImage,不能压缩)。
  • crash:GDB 扩展,提供丰富命令查看 vmcore 的状态。
  1. crash 运行方式
crash vmlinux vmcore

此命令加载内核调试符号和崩溃转储文件,进入交互式调试界面。

使用 crash 查看关键内核状态

常用命令一览:

命令功能描述
help查看 crash 支持的命令
bt打印当前任务的调用栈
ps查看所有进程状态
log查看 dmesg 日志
vm查看虚拟内存使用情况
files显示进程打开的文件信息
kmem查看 slab 分配器的使用状态
runq显示运行队列
irq显示中断表
foreach TASK bt打印所有进程的调用栈

典型分析流程

  1. 收集内核转储(kdump)

编辑 /etc/kdump.conf,配置崩溃转储位置,然后启用服务:

systemctl enable kdump.service
systemctl start kdump.service

当系统 panic 时,kdump 会保存 /var/crash/<timestamp>/vmcore

  1. 使用 crash 分析崩溃镜像
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/.../vmcore

进入 crash 命令行后:

log     # 查看最后 dmesg,寻找 panic 原因
bt      # 当前进程的调用栈
ps      # 定位是哪个进程发生问题
files   # 检查是否文件系统相关

深入分析场景

  1. 调用栈分析(bt)
> bt
PID: 1234   TASK: ffff888123456000  CPU: 1   COMMAND: "my_process"
 #0 [ffff8880b3e079d8] machine_kexec at ffffffff8105e1d0
 #1 [ffff8880b3e07a30] __crash_kexec at ffffffff810e319d
...

查明触发 crash 的函数链路。

  1. 分析 slab 内存泄漏(kmem
> kmem -s
CACHE            NAME            OBJSIZE  ALLOCATED
ffff88812fa2a100 dentry           192      23421
ffff88812fa2b100 kmalloc-512      512       9999
...

配合 slabinfo 查看泄漏热点。

  1. 查看内核符号
sym irq_exit
type task_struct

可用于查看内核内部结构。

crash vs GDB

项目GDBcrash
操作对象用户态程序/内核符号运行中内核或崩溃转储 vmcore
功能通用调试器面向内核结构,命令更友好
调用栈查看支持,但需手动查结构内建 bt 命令支持所有任务
内存查看支持rd, list, struct, kmem 等功能更强

crash 插件与拓展

  • extensions/ 目录下可以放入自定义模块(以 .c 实现 __crash_extension_init__ 入口)
  • Python 脚本支持:较弱,crash 本身偏 C 插件开发

构建 crash 和 vmlinux 符号建议

确保使用与你分析的内核完全一致的 vmlinux(可通过 debuginfo 包安装):

dnf install kernel-debuginfo-$(uname -r)

示例:分析一次 Null Pointer Dereference

日志提示:

kernel NULL pointer dereference at 0x0

crash 分析:

crash vmlinux vmcore
> log
...
> bt
> struct task_struct ffff888123456000
> dis -l ffffffff810abcd0

可反推出发生崩溃的函数位置与参数状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值