Linux系统crash后定位方法-PCIE举例

crash解释

在Linux操作系统中,"crash"通常是指一种用于分析系统崩溃(crash)的工具或方法。当系统发生崩溃时,可能会产生一些关键信息,如错误日志、内存转储文件等。使用crash工具可以分析这些信息,以便了解崩溃的原因和上下文。

crash工具是一个基于命令行的工具,它可以加载系统转储文件,然后提供一系列命令来查看和分析系统状态。例如,可以使用crash工具来查看进程列表、线程列表、内存映射、堆栈跟踪、寄存器值等信息。crash还支持多种操作系统架构和文件系统类型。

通过使用crash工具,开发人员和系统管理员可以更快地诊断和解决系统崩溃问题,从而提高系统的可靠性和稳定性。

crash生成文件

出现crash后会在指定路径生成文件

在这里插入图片描述
"vmcore"通常是指在Linux操作系统中,当系统发生崩溃(crash)时自动生成的内核转储文件。该文件包含了操作系统崩溃时的系统状态、进程信息、内存映射、寄存器值等重要信息,以便开发人员和系统管理员进行故障诊断和分析。

vmcore文件通常很大,它记录了整个系统在崩溃前的状态和各种信息,包括内核代码、驱动程序、应用程序和库等。管理员可以使用一些工具来分析vmcore文件,如crash、gdb等。这些工具可以从vmcore文件中提取出关键信息,帮助管理员找出系统崩溃的原因。

vmcore文件的生成通常由内核中的某些机制触发,例如内核崩溃、紧急情况下的系统抓取(Panic Timeout)、kdump等。其中,kdump是一种在Linux系统中用于生成vmcore文件的机制,它通过在系统崩溃时启动一个较小的内核(称为crash内核),将当前系统的内存转储到磁盘上,并生成一个vmcore文件。这样,管理员就可以在不影响当前系统运行的情况下,对vmcore文件进行分析和处理。

总之,vmcore文件是Linux系统在发生崩溃时自动生成的内核转储文件,它包含了有关系统崩溃时的状态和信息,可以用于故障诊断和分析。

分析方法

mcelog

安装

mcelog是一个Linux命令行工具,用于分析机器检查异常(MCE)日志,并将其转换为可读的ASCII格式。要使用mcelog --ascii命令,请按照以下步骤操作:

  1. 打开终端或控制台窗口。

  2. 运行以下命令来安装mcelog:

    sudo apt-get install mcelog
    
  3. 运行以下命令以查看机器检查异常日志的ASCII格式输出:

    sudo mcelog --ascii
    
  4. 如果只想查看最近的MCE日志,请运行以下命令:

    sudo mcelog --ascii --last
    
  5. 如果只想查看特定CPU上的MCE日志,请运行以下命令,其中“X”表示CPU编号:

    sudo mcelog --ascii --cpu X
    
  6. 可以将输出保存到文件中以进行进一步分析。例如,要将输出保存到名为“mce.log”的文件中,请使用以下命令:

    sudo mcelog --ascii > mce.log
    

以上命令的输出将包括每个错误的时间戳、处理器和内存地址、错误类型、错误代码等详细信息,这有助于确定硬件故障的原因。

使用

使用的前提是要先安装运行

 mcelog --daemon
 Run mcelog in daemon mode, waiting for errors from the kernel.

若要使用mcelog命令来分析crash日志,可以按照以下步骤:

  1. 打开终端或控制台窗口。

  2. 安装mcelog软件包。如果您的系统上已经安装了该软件包,请跳过此步骤。在Debian/Ubuntu系统上,可以使用以下命令安装:

    sudo apt-get install mcelog
    
  3. 运行以下命令以查看机器检查异常日志的ASCII格式输出:

    sudo mcelog --ascii > mce.log
    

    此命令将把mcelog的输出保存到名为“mce.log”的文件中。

  4. 使用文本编辑器(例如nano、vi或gedit)打开生成的日志文件:

    nano mce.log
    

    您也可以使用cat命令查看整个日志文件:

    cat mce.log
    
  5. 在日志文件中查找有关发生crash的时间戳和CPU编号等信息。这些信息可以帮助您确定与错误相关的硬件设备。

  6. 通过分析日志中的其他详细信息,例如错误类型、错误代码和处理器状态等,来进一步诊断问题。

mcelog只能分析硬件错误并提供有关错误类型、地址和处理器状态等信息。对于其他类型的错误(例如软件错误),mcelog可能无法提供任何有用的信息。因此,在分析crash日志时,您可能需要使用其他工具和技术来确定问题的根本原因。

crash

使用crash来分析Linux系统崩溃通常需要以下步骤:

  1. 安装crash工具:在大多数Linux发行版中,crash工具已经包含在内核调试工具集中。如果没有安装,则可以通过操作系统的包管理器进行安装。

  2. 收集vmcore文件:如果是使用kdump机制生成的vmcore文件,则需要将其复制到本地系统中,以便进行分析。如果没有vmcore文件,则可以尝试手动导出系统转储(如sysrq-t)或其他方法来收集有关崩溃的信息。

  3. 启动crash工具:在终端中输入crash命令,然后指定要分析的vmcore文件路径。

crash <options> <path-to-vmcore>
  1. 使用crash命令:一旦进入crash环境,就可以使用一系列命令来查看和分析系统状态。例如,"bt"命令用于显示当前进程或线程的堆栈跟踪信息,"ps"命令用于列出当前运行的进程列表,"mem"命令用于查看内存映射等。

  2. 分析结果:根据crash命令输出的信息,可以识别出造成系统崩溃的原因和上下文。例如,可以查看系统日志、内存映射、堆栈跟踪等信息,以了解哪个进程或驱动程序引起了崩溃。
    需要注意的是,crash工具的使用需要一定的Linux系统知识和调试技能。在进行分析之前,建议先阅读相关文档或参考教程,以便更好地理解和应用crash工具。

举例分析

执行crash 可以看到有符号镜像文件
在这里插入图片描述
在这里插入图片描述

查看crash

在这里插入图片描述
解释

这是一个内核崩溃的信息,以下是每一行的含义:

- WARNING: kernel relocated [672MB]: patching 94975 gdb minimal_symbol values:警告内核已重定位,并正在对gdb最小符号值进行修补。
- KERNEL: /usr/lib/debug/lib/modules/4.18.0-193.el8.x86_64/vmlinux:指出内核文件所在的路径。
- DUMPFILE: vmcore [PARTIAL DUMP]:指出转储文件的名称和类型(部分转储)。
- CPUS: 48:指出系统的CPU数量。
- DATE: Sat May 13 11:03:35 2023:指出崩溃发生的日期和时间。
- UPTIME: 01:48:49:指出系统的运行时间。
- LOAD AVERAGE: 0.21, 0.06, 0.02:指出过去1、5、15分钟的平均负载。
- TASKS: 1063:指出系统当前正在运行的任务数。
- NODENAME: localhost.localdomain:指出主机名。
- RELEASE: 4.18.0-193.e18.x8664:指出内核版本。
- VERSION: #1 SMP Fri May 8 10:59:10 UTC 2020:指出内核编译时使用的版本信息。
- MACHINE: x86_64 (2100Mhz):指出CPU架构和频率。
- MEMORY: 31.7 GB:指出系统的总内存量。
- PANIC: "Kernel panic not syncing: Fatal machine check":指出内核崩溃的原因。
- PID: 0:指出正在运行的进程ID。
- COMMAND: "swapper/23":指出正在运行的进程名称。
- TASK: ff4cef3183ba8000 (10f48) [THREAD INFO: ff4cef3183ba8000] CPU: 23 STATE: TASK RUNNING (PANIC):指出正在运行的线程的信息,包括线程ID、CPU编号、状态等。
- #0 [fffffe00003e7c60] machine_kexec at ffffffffab05982e:指出当前堆栈帧的编号、函数名称和地址。
- #1 [fffffe00003e7cb8] crash_kexec at ffffffffab158d8d:指出上一级堆栈帧的信息。
- #2 [fffffe00003e7d80] panic at ffffffffab01498:指出更高一级堆栈帧的信息。
- #3 [fffffe00003e7e48] do_machine_check at ffffffffab03981a:指出更高一级堆栈帧的信息。
- #4 [fffffe00003e7f50] machine_check at ffffffffaba0l26b [exception RIP: mwait_idle+127]:指出更高一级堆栈帧的信息,并显示引起异常的指令地址(RIP)和标志寄存器(RFLAGS)。
- RIP: ffffffffab89458f RSP: ff7ed162c345beb0 RFLAGS: 00000246 RAX: 0000000000000000 RBX: 0000000000000017 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000017 RDI: ff4cef38df6dd5c0 RBP: 0000000000000017 R8: 0000000000000000 R9: 0000000000029480 R10: 000a527e953cc2e5 R11: 0000000000000000 R12: 0000000000000000 R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018:显示了引起异常的指令的寄存器状态。
- <MCE exception stack>:指出崩溃时发生的机器检查(Machine Check Exception)异常的堆栈信息。
- #5 [ff7edl62c345bebo] mwait_idle at ffffffffab89458f:指出更高一级堆栈帧的信息。
- #6 [ff7ed162c345bedo] do_idle at ffffffffab0e67al:指出更高一级堆栈帧的信息。
- #7 [ff7ed162c345bf10] cpu_startup_entry at ffffffffab0e6aof:指出更高一级堆栈帧的信息。
- #8 [ff7ed162c345bf30] start_secondary at ffffffffab04eal7:指出更高一级堆栈帧的信息。
- #9 [ff7ed162c345bf50] secondary_startup_64 at ffffffffab0000e7:指出更高一级堆栈帧的信息。
- crash>:提示用户可以在命令行中输入命令来分析崩溃信息。

定位

查看RP的扩展空间
在这里插入图片描述
AERC在这里插入图片描述
协议
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值