使用crash分析内核转储文件vmcore

运行重要业务的操作系统意外宕机后,为了进一步分析宕机原因,一般都会配置Kdump获取内核崩溃时的内存镜像,分析系统在崩溃前发生了什么,定位故障原因并修复错误。

实验环境

操作系统:RHEL 6.10

安装流程

第一步 安装Kdump、Crash

  1. [root@wanghualang ~]# yum -y install kexec-tools crash  
  2. [root@wanghualang ~]# chkconfig kdump on    

第二步 配置crashkernel(可选)

crashkernel默认为auto,已满足绝大部分场景使用,当然也可以根据服务器物理内存大小去自定义内存空间。

官方文档:https://www.kernel.org/doc/Documentation/kdump/kdump.txt

  1. [root@wanghualang ~]# sed -i 's/crashkernel=auto/crashkernel=128M/' /boot/grub/grub.conf  

第三步 重启系统

  1. [root@wanghualang ~]# reboot  

第四步 模拟内核崩溃,操作系统恢复后确认是否生成内核转储文件

  1. [root@wanghualang ~]# echo c > /proc/sysrq-trigger  
  2. [root@wanghualang ~]# ls /var/crash  

第五步 安装内核调试工具

分析内核转储文件,必须安装对应内核版本的调试工具,教程中的操作系统内核版本为:2.6.32-754.el6.x86_64

官方下载:http://debuginfo.centos.org/

  1. [root@wanghualang ~]# rpm -ivh http://debuginfo.centos.org/6/x86_64/kernel-debuginfo-common-x86_64-2.6.32-754.el6.x86_64.rpm  
  2. [root@wanghualang ~]# rpm -ivh http://debuginfo.centos.org/6/x86_64/kernel-debuginfo-2.6.32-754.el6.x86_64.rpm  

第六步 分析内核转储文件

具体分析流程比较复杂,一般非专业人士主要就是获取内核崩溃的类型、导致内核崩溃的进程名称。

扩展阅读展开

KERNEL:调试用内核的路径与版本信息
DUMPFILE:正在分析的内核转储文件
CPUS:本机CPU数目
DATE:内核崩溃发生时间
UPTIME:内核已正常运行时间
LOAD AVERAGE:内核崩溃时系统负载
TASKS:内核崩溃时系统运行任务数
NODENAME:内核崩溃的主机名
RELEASE:内核的发布版本
VERSION:内核的其他版本信息
MACHINE: CPU架构与主频信息
MEMORY:内核崩溃时的系统内存大小
PANIC:内核崩溃的类型(SysRq、Oops、Panic)
PID:导致内核崩溃的进程号
COMMAND:导致内核崩溃的进程名称
TASK:导致内核崩溃的进程访问内存地址
CPU:导致内核崩溃的进程占用 CPU数目
STATE:导致内核崩溃的进程的运行状态

  1. [root@wanghualang ~]# crash /usr/lib/debug/lib/modules/2.6.32-754.el6.x86_64/vmlinux /var/crash/127.0.0.1-2020-04-04-22\:14\:57/vmcore  
  2.   
  3. crash 7.1.0-8.el6    
  4. Copyright (C) 2002-2014  Red Hat, Inc.    
  5. Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation    
  6. Copyright (C) 1999-2006  Hewlett-Packard Co    
  7. Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited    
  8. Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.    
  9. Copyright (C) 2005, 2011  NEC Corporation    
  10. Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.    
  11. Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.    
  12. This program is free software, covered by the GNU General Public License,    
  13. and you are welcome to change it and/or distribute copies of it under    
  14. certain conditions.  Enter "help copying" to see the conditions.    
  15. This program has absolutely no warranty.  Enter "help warranty" for details.    
  16.      
  17. GNU gdb (GDB) 7.6    
  18. Copyright (C) 2013 Free Software Foundation, Inc.    
  19. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>    
  20. This is free software: you are free to change and redistribute it.    
  21. There is NO WARRANTY, to the extent permitted by law.  Type "show copying"    
  22. and "show warranty" for details.    
  23. This GDB was configured as "x86_64-unknown-linux-gnu"...    
  24.     
  25. WARNING: kernel version inconsistency between vmlinux and dumpfile    
  26.     
  27. KERNEL: /usr/lib/debug/lib/modules/2.6.32-754.el6.x86_64/vmlinux    
  28. DUMPFILE: /var/crash/127.0.0.1-2020-04-04-22:14:57/vmcore  [PARTIAL DUMP]    
  29. CPUS: 1    
  30. DATE: Sat Apr  4 22:14:53 2020    
  31. UPTIME: 00:01:01    
  32. LOAD AVERAGE: 0.09, 0.04, 0.01    
  33. TASKS: 244    
  34. NODENAME: wanghualang    
  35. RELEASE: 2.6.32-754.el6.x86_64    
  36. VERSION: #1 SMP Thu May 24 18:18:25 EDT 2018    
  37. MACHINE: x86_64  (2807 Mhz)    
  38. MEMORY: 4 GB    
  39. PANIC: "SysRq : Trigger a crash"    
  40. PID: 2917    
  41. COMMAND: "bash"    
  42. TASK: ffff880138056ab0  [THREAD_INFO: ffff88013be1c000]    
  43. CPU: 0    
  44. STATE: TASK_RUNNING (SYSRQ)    
  45.   
  46. crash>    
匿名

发表评论

匿名网友 填写信息