跳到主要内容

Linux crash 命令 - 分析内核崩溃转储

介绍

crash 是一个用于交互式分析 Linux 内核崩溃转储(vmcore)和运行中内核状态的调试工具。它整合了 gdb 风格的命令接口和大量内核专用命令,可查看调用栈、进程列表、内存、寄存器、模块信息等,是分析 kdump 产生的崩溃转储文件的主要工具。

crash 命令由 crash 软件包提供,在 Debian/Ubuntu 系统上可以使用如下命令进行安装。

sudo apt install crash

分析 vmcore 时还需要对应内核版本的调试符号(linux-image-*-dbgvmlinux)。

语法

crash [options] [namelist] [system-map] [dumpfile]
crash [options] [namelist] -d dumpfile

常用选项

  • -h:显示帮助
  • -s:进入 batch 模式,不显示启动信息
  • -i file:启动时执行命令文件
  • -d dumpfile:指定转储文件

常用交互命令

命令说明
help显示帮助
log显示内核日志缓冲区
bt显示当前上下文调用栈
bt -a显示所有 CPU 的调用栈
ps显示进程列表
vm显示虚拟内存信息
files显示进程打开的文件
mount显示挂载信息
mod显示已加载内核模块
dev显示设备信息
kmem -i显示内核内存使用摘要
sys显示系统信息
exit / q退出

相关命令:kdumpperfstrace

示例

1、分析 kdump 产生的 vmcore 文件:

sudo crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/127.0.0.1-*/vmcore

2、分析运行中内核的实时状态(需要 root 权限):

sudo crash /usr/lib/debug/boot/vmlinux-$(uname -r)

3、启动后查看崩溃时的内核日志:

crash> log

4、查看崩溃时所有 CPU 的调用栈:

crash> bt -a

5、查看崩溃时的进程列表:

crash> ps

6、查看指定进程(如 PID 1)的调用栈:

crash> bt 1

7、查看内核内存使用情况:

crash> kmem -i

8、以 batch 模式执行命令脚本:

crash -s -i commands.txt vmlinux vmcore