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命令,请按照以下步骤操作:
-
打开终端或控制台窗口。
-
运行以下命令来安装mcelog:
sudo apt-get install mcelog
-
运行以下命令以查看机器检查异常日志的ASCII格式输出:
sudo mcelog --ascii
-
如果您只想查看最近的MCE日志,请运行以下命令:
sudo mcelog --ascii --last
-
如果您只想查看特定CPU上的MCE日志,请运行以下命令,其中“X”表示CPU编号:
sudo mcelog --ascii --cpu X
-
您还可以将输出保存到文件中以进行进一步分析。例如,要将输出保存到名为“mce.log”的文件中,请使用以下命令:
sudo mcelog --ascii > mce.log
以上命令的输出将包括每个错误的时间戳、处理器和内存地址、错误类型、错误代码等详细信息,这有助于确定硬件故障的原因。
使用
使用的前提是要先安装运行
mcelog --daemon
Run mcelog in daemon mode, waiting for errors from the kernel.
若要使用mcelog命令来分析crash日志,可以按照以下步骤:
-
打开终端或控制台窗口。
-
安装mcelog软件包。如果您的系统上已经安装了该软件包,请跳过此步骤。在Debian/Ubuntu系统上,您可以使用以下命令安装:
sudo apt-get install mcelog
-
运行以下命令以查看机器检查异常日志的ASCII格式输出:
sudo mcelog --ascii > mce.log
此命令将把mcelog的输出保存到名为“mce.log”的文件中。
-
使用文本编辑器(例如nano、vi或gedit)打开生成的日志文件:
nano mce.log
您也可以使用cat命令查看整个日志文件:
cat mce.log
-
在日志文件中查找有关发生crash的时间戳和CPU编号等信息。这些信息可以帮助您确定与错误相关的硬件设备。
-
通过分析日志中的其他详细信息,例如错误类型、错误代码和处理器状态等,来进一步诊断问题。
mcelog只能分析硬件错误并提供有关错误类型、地址和处理器状态等信息。对于其他类型的错误(例如软件错误),mcelog可能无法提供任何有用的信息。因此,在分析crash日志时,您可能需要使用其他工具和技术来确定问题的根本原因。
crash
使用crash来分析Linux系统崩溃通常需要以下步骤:
-
安装crash工具:在大多数Linux发行版中,crash工具已经包含在内核调试工具集中。如果没有安装,则可以通过操作系统的包管理器进行安装。
-
收集vmcore文件:如果是使用kdump机制生成的vmcore文件,则需要将其复制到本地系统中,以便进行分析。如果没有vmcore文件,则可以尝试手动导出系统转储(如sysrq-t)或其他方法来收集有关崩溃的信息。
-
启动crash工具:在终端中输入crash命令,然后指定要分析的vmcore文件路径。
crash <options> <path-to-vmcore>
-
使用crash命令:一旦进入crash环境,就可以使用一系列命令来查看和分析系统状态。例如,"bt"命令用于显示当前进程或线程的堆栈跟踪信息,"ps"命令用于列出当前运行的进程列表,"mem"命令用于查看内存映射等。
-
分析结果:根据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
协议