debug vmcore on CentOS 7.2

本文介绍如何在CentOS 7上安装并使用crash工具进行内核崩溃调试,包括触发panic、收集vmcore文件及分析崩溃原因的方法。

# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
# uname -a

Linux dev-r630-04 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

 

安装下面两个rpm包

-rw-r--r--. 1 root root 277M Dec 22  2015 kernel-debuginfo-3.10.0-327.el7.x86_64.rpm

-rw-r--r--. 1 root root  45M Dec 22  2015 kernel-debuginfo-common-x86_64-3.10.0-327.el7.x86_64.rpm

 

centos 7.5
http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-common-x86_64-3.10.0-862.el7.x86_64.rpm
http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-3.10.0-862.el7.x86_64.rpm

 

下载地址:

http://debuginfo.centos.org/7/x86_64/

安装crash

# yum install crash

用下面的命令trigger一个panic:

# echo 1 > /proc/sys/kernel/sysrq;

# echo c > /proc/sysrq-trigger

重启后,用下面的命令分析:

# cd /var/crash

# ln -s 127.0.0.1-2017-10-22-22\:52\:31/vmcore vmcore.0

# /bin/crash /var/crash/vmcore.0 /usr/lib/debug/lib/modules/3.10.0-327.el7.x86_64/vmlinux


crash 7.1.9-2.el7
Copyright (C) 2002-2016  Red Hat, Inc.
Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
Copyright (C) 1999-2006  Hewlett-Packard Co
Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
Copyright (C) 2005, 2011  NEC Corporation
Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
This program is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions.  Enter "help copying" to see the conditions.
This program has absolutely no warranty.  Enter "help warranty" for details.


GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu"...


      KERNEL: /usr/lib/debug/lib/modules/3.10.0-327.el7.x86_64/vmlinux
    DUMPFILE: /var/crash/vmcore.0  [PARTIAL DUMP]
        CPUS: 8
        DATE: Wed Oct 25 01:37:54 2017
      UPTIME: 18:36:56
LOAD AVERAGE: 0.10, 0.07, 0.06
       TASKS: 678
    NODENAME: dev-r630-04
     RELEASE: 3.10.0-327.el7.x86_64
     VERSION: #1 SMP Thu Nov 19 22:10:57 UTC 2015
     MACHINE: x86_64  (2599 Mhz)
      MEMORY: 63.8 GB
       PANIC: "SysRq : Trigger a crash"
         PID: 3203
     COMMAND: "bash"
        TASK: ffff88084ec3dc00  [THREAD_INFO: ffff880079e18000]
         CPU: 4
       STATE: TASK_RUNNING (SYSRQ)


crash> net
   NET_DEVICE     NAME   IP ADDRESS(ES)
ffff880851a8c000  lo     127.0.0.1
ffff88084f7a4000  eno1   10.12.205.14
ffff880851b54000  eno2
ffff880850a9a000  eno3
ffff880850a98000  eno4
ffff88104fa3e000  virbr0 192.168.122.1
ffff881043448000  virbr0-nic

 

debug live kernel,直接运行crash就行

# crash



crash 7.1.9++
Copyright (C) 2002-2017  Red Hat, Inc.
Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
Copyright (C) 1999-2006  Hewlett-Packard Co
Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
Copyright (C) 2005, 2011  NEC Corporation
Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
This program is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions.  Enter "help copying" to see the conditions.
This program has absolutely no warranty.  Enter "help warranty" for details.


GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu"...


      KERNEL: /usr/lib/debug/lib/modules/3.10.0-327.el7.x86_64/vmlinux
    DUMPFILE: /dev/crash
        CPUS: 8
        DATE: Wed Oct 25 01:50:52 2017
      UPTIME: 00:11:20
LOAD AVERAGE: 0.04, 0.04, 0.05
       TASKS: 658
    NODENAME: dev-r630-04
     RELEASE: 3.10.0-327.el7.x86_64
     VERSION: #1 SMP Thu Nov 19 22:10:57 UTC 2015
     MACHINE: x86_64  (2600 Mhz)
      MEMORY: 63.8 GB
         PID: 3308
     COMMAND: "crash"
        TASK: ffff88104fde9700  [THREAD_INFO: ffff88104f318000]
         CPU: 5
       STATE: TASK_RUNNING (ACTIVE)


crash>

 

如果要源码编译crash的话,加上lzo support

# make lzo

08-20
分析 `vmcore` 文件(即虚拟机内存转储)是排查系统崩溃或性能问题的重要手段。以下内容涵盖了从生成 `vmcore` 文件到使用工具分析的全过程,结合相关引用内容进行说明。 ### 3.1 vmcore 文件的生成 在系统发生内核崩溃(kernel panic)时,`kdump` 服务会捕获当前内存状态并生成 `vmcore` 文件。该文件通常位于 `/var/crash` 目录下。为了生成 `vmcore`,需要确保以下配置正确: - **kdump 服务已启用并配置**:通过 `systemctl enable kdump` 和 `systemctl start kdump` 启动服务。 - **预留内核崩溃内存**:在内核启动参数中添加 `crashkernel=...`,例如 `crashkernel=256M`。 - **指定转储路径**:通过 `dumpadm` 设置保存 `vmcore` 的目录,如 `/var/crash/` [^2]。 在某些情况下,如 VMware 虚拟机系统挂起(hang)并未触发内核崩溃,则无法自动生成 `vmcore`。此时需要手动创建内存快照,并使用工具如 `Volatility` 进行分析 [^4]。 ### 3.2 vmcore 文件的分析工具 #### 使用 `crash` 工具分析 `crash` 是一个用于分析 Linux 内核崩溃转储的命令行工具。要运行 `crash`,至少需要两个参数: - `vmlinux` 文件:与运行内核对应的调试符号文件,通常位于 `/usr/lib/debug/lib/modules/<kernel-version>/vmlinux`。 - `vmcore` 文件:由 `kdump` 生成的内存转储文件 [^1]。 使用示例: ```bash crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/<timestamp>/vmcore ``` 进入 `crash` 交互界面后,可以执行命令如 `bt`(查看堆栈跟踪)、`ps`(查看进程状态)、`log`(查看内核日志)等来诊断问题。 #### 使用 `Volatility` 分析虚拟机内存快照 对于 VMware 虚拟机,若系统挂起但未触发 `kdump`,可使用 VMware 工具生成 `.vmem` 或 `.vmsn` 格式的内存快照。随后使用 `Volatility`(支持 Python 3 的版本为 `Volatility3`)进行分析。 安装依赖: ```bash pip install distorm3 ``` 分析示例(以 Volatility3 为例): ```bash python3 vol.py -f /path/to/vmcore dumpfiles ``` Volatility 提供了多种插件用于分析内存中的进程、网络连接、注册表项等信息,适用于取证和调试场景 [^4]。 ### 3.3 进程核心转储(Core Dump)的配置与分析 除了系统级的 `vmcore`,用户还可以配置进程级别的核心转储文件。Solaris 和 Linux 系统中,`coreadm` 工具可用于定制核心转储的内容和路径。 默认情况下,Solaris 系统将生成包含栈、堆、文本段、共享内存(SHM)、ISMs 和 DISMs 的核心文件,并附带部分符号表(dynsm),便于直接分析堆栈信息。如需更完整的符号信息,可使用以下命令: ```bash coreadm -G all -I all ``` 这将确保所有符号表被包含在核心转储中,提高调试效率 [^3]。 ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值