crash工具解析_3.3.3 内核态调测工具:kdump&crash——crash解析

本文介绍了Linux系统内核崩溃时,如何利用kdump收集内存转储文件vmcore和dmesg,并重点讲解了内核崩溃分析工具crash的使用,包括dmesg文件和dump文件的分析,以及crash中的一些常用命令,如bt、log、ps、dis、struct等,帮助内核开发者定位问题。
摘要由CSDN通过智能技术生成

什么是crash

linux 系统内核发生崩溃的时候,可以通过 kdump 等方式收集内核崩溃之前的内存,生成转储文件 vmcore和dmesg。内核开发者通过分析该 vmcore 文件就可以诊断出内核崩溃的原因,从而进行操作系统的代码改进。 crash 就是一个被广泛使用的内核崩溃转储文件分析工具,掌握 crash 的使用技巧,对于定位问题有着十分重要的作用。

crash使用

接上文,系统安装kdump成功后,使用如下命令手动触发系统panic

sudo echo c > /proc/sysrq-trigger

系统崩溃,重启后生成挂死日志

cuibixuan@cuibixuan-virtual-machine:/var/crash$ ls
202001301611  kdump_lock  kexec_cmd  linux-image-5.0.0-27-generic-202001301611.crash

在202001301611目录下有2个文件:

dmesg.202001301611:上次启动的内核dmesg信息

dump.202001301611:上次崩溃的信息

crash分析

dmesg文件分析

dmesg文件存储上次内核的dmesg信息,在系统崩溃的堆栈信息,记录在这里

[  266.402416] Kernel panic - not syncing: sysrq triggered crash //这里描述内核因为sysrq trigger触发panic
[  266.402418] CPU: 0 PID: 1857 Comm: bash Kdump: loaded Not tainted 5.0.0-27-generic #28~18.04.1-Ubuntu
[  266.402419] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 04/13/2018
[  266.402420] Call Trace:  //这里堆栈信息
[  266.402426]  dump_stack+0x63/0x85
[  266.402428]  panic+0xfe/0x2a4
[  266.402431]  sysrq_handle_crash+0x15/0x20
[  266.402432]  __handle_sysrq+0x9f/0x170
[  266.402433]  write_sysrq_trigger+0x34/0x40
[  266.402435]  proc_reg_write+0x3e/0x60
[  266.402437]  __vfs_write+0x1b/0x40
[  266.402438]  vfs_write+0xb1/0x1a0
[  266.402439]  ksys_write+0x5c/0xe0
[  266.402441]  __x64_sys_write+0x1a/0x20
[  266.402443]  do_syscall_64+0x5a/0x120
[  266.402444]  entry_SYSCALL_64_after_hwframe+0x44/0xa9

以上信息对内核人员非常重要,在实际分析时,基本根据堆栈信息就可以推敲出错原因,当然这需要一些经验和内核知识,这里不再展开,有时间讲一讲。

dump文件分析

如果仔细查看,dump文件有40M大小,远远大于dmesg文件,里面存储着上次内核的非常丰富的内核信息,包括cpu、内存、进程等等,方便内核人员查看到根因。因为自己电脑虚拟只开了一会,如果实际业务执行,经常每个crash文件有几个G。

root@cuibixuan-virtual-machine:/var/crash/202001301611# ls -lhh
total 40M
-rw------- 1 root whoopsie 49K 1月  30 16:11 dmesg.202001301611
-rw------- 1 root whoopsie 40M 1月  30 16:11 dump.202001301611

分析dump文件需要内核vmlinux,安装对应内核的dbgsym包

cuibixuan@cuibixuan-virtual-machine:~$ uname -r
5.0.0-27-generic
cuibixuan@cuibixuan-virtual-machine:~$ sudo apt-cache search linux-image |grep dbgsym |grep 5.0.0-27-generic
linux-image-unsigned-5.0.0-27-generic-dbgsym - Linux kernel debug image for version 5.0.0 on 64 bit x86 SMP
linux-image-5.0.0-27-generic-dbgsym - Signed kernel image generic
cuibixuan@cuibixuan-virtual-machine:~$ sudo apt-get instal
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值