2025年LINUX常用工具之kdump分析

LINUX常用工具之kdump分析前言 Linux 操作系统的内核一般来说比较稳定 有些机器跑了十多年没有重启过 但是海量机器面前仍不可避免会遇到各种崩溃的情况 本文介绍使用 kdump 获取内核崩溃时的内存镜像 有助于分析系统在崩溃前发生了什么 分析原因并修复错误 进而进一步提升系统的稳定性 一 kdump 简介

大家好,我是讯享网,很高兴认识大家。

前言:

Linux操作系统的内核一般来说比较稳定,有些机器跑了十多年没有重启过,但是海量机器面前仍不可避免会遇到各种崩溃的情况,本文介绍使用kdump获取内核崩溃时的内存镜像,有助于分析系统在崩溃前发生了什么,分析原因并修复错误,进而进一步提升系统的稳定性。

一、kdump简介

kdump 是目前最有效的linux内存镜像收集机制,广泛应用于各大linux厂商的各种产品中,在 debug 内核方面起着不可替换的重要作用。
Kdump 是一种基于 kexec 的 Linux 内核崩溃捕获机制,将 kernel 崩溃前的内存镜像保存,程序员通过分析该文件找出 kernel 崩溃的原因,从而进行系统改进。
Kdump用于对内存镜像的转储,它不但可以转储内存镜像到本地硬盘,还可以将内存镜像通过NFS,SSH等协议转储到不同机器的设备上。
Kdump分为两个组件:Kexec和Kdump。
Kexec是一种内核的快速启动工具,可以使新的内核在正在运行的内核(生产内核)的上下文中启动,而不需要通过耗时的BIOS检测,方便内核开发人员对内核进行调试。Kdump是一种有效的内存转储工具,启用Kdump后,生产内核将会保留一部分内存空间,用于在内核崩溃时通过Kexec快速启动到新的内核,这个过程不需要重启系统,因此可以转储崩溃的生产内核的内存镜像。

二、kdump安装

以 RHEL 为例,安装 crash 及内核调试信息包的步骤如下:

rpm -ivh crash-5.1.8-1.el6.ppc64.rpm rpm -ivh kernel-debuginfo-common-ppc64-2.6.32-220.el6.ppc64.rpm rpm -ivh kernel-debuginfo-2.6.32-220.el6.ppc64.rpm

安装可从这里下载:


2.3      配置kdump的一些参数。
kdump默认将文件存放在本地硬盘的/var/crash/目录下,该位置可以是本地文件系统的某个目录,或者某个块设备,或者通过网络存储在其他机器上,可以修改文件:
cat /etc/kdump.conf


讯享网

注: --message-devel 1表示提示信息的级别,1表示只显示进度信息。

-d 31表示不复制所有可以去掉的内存页,包括zero page, cache page, cache private, user data, free page等
---#default shell
表示如果kdump转储内存镜像失败后的执行的动作,默认为挂载根文件系统并执行/sbin/init进程,可更改为reboot, halt, poweroff, shell等

2.4      将kdump服务设置为开机自启动。

[root@node1 crash]# systemctl enable kdump
[root@node1 crash]# systemctl start kdump
 

2.5      验证配置是否成功。(注意只能测试环境模拟宕机)
使用命令出发内核的崩溃,如在指定目录下生成内核镜像文件则表示配置成功。

echo c > /proc/sysrq-trigger

三、crash介绍

1、crash是目前广泛使用的 linux 内核崩溃转储文件的分析工具,掌握crash的使用技巧,对于分析定位内核崩溃的问题,有着非常重要的作用。
对于内核开发人员,crash 已经成了必不可少的一个工具。
 

crash vmcore /usr/lib/debug/lib/modules/2.6.32-220.el6.x86_64/vmlinux


各项参数的意义为:

Kernel——表示调试内核的位置和版本信息
DUMPFILE——表示所分析的内存转储镜像
CPUS——表示本机的CPU数目
DATE——表示内核崩溃发生的时间
UPTIME——表示内核已正常运行的时间
LOAD AVERAGE——表示内核崩溃时系统的负载
TASKS——表示内核崩溃时系统运行的任务数
NODENAME——表似乎内核崩溃的机器的主机名
RELEASE——表示内核的发布版本
VERSION——表示内核的其他版本信息
MACHINE——表示CPU架构和主频信息
MEMORY——表示发生内核崩溃的系统的内存大小
PANIC——表示崩溃的类型。可能有SysRq,即通过系统请求造成的内核崩溃;Oops,表示内核发生了不可预测或不正确的行为,这时会杀死相应的进程,内核可能恢复正常,也可能处于一种不确定的状态,进而导致内核的Panic;Pannic,内核崩溃,即发生了严重且不可修复的错误,如发生了非法的地址访问,强制加载或卸载内核模块,以及硬件错误等等
PID——表示导致内核崩溃的的进程号
COMMAND——表示导致内核崩溃的进程名称
TASK——表示导致内核崩溃的进程访问的内存地址
CPU——表示导致内核崩溃的进程占用的CPU数目
STATE——表示导致内核崩溃的进程的运行状态
 

3、 crash常用命令

help                  #查看命令的帮助信息,也可用man命令
h                      #查看历史命令,相当于shell下的history
log                    #该命令用于打印出内存的日志信息
bt                     #该命令用于获取当前线程的调用堆栈
foreach bt #该命令用于获取所有线程的调用堆栈
ps                     #该命令用于查看内核崩溃时的进程信息
vm                    #该命令用于查看当前的内核上下文的虚拟内存信息
files                  #该命令用于查看当前的内核上下文中打开的文件
exit  or  q       #退出Crash

(1)使用 bt 命令查看堆栈


(2)log 命令可以打印系统消息缓冲区,从而可能找到系统崩溃的线索


(3)ps 命令用于显示进程的状态,(如图)带 > 标识代表是活跃的进程。


(4)files命令可以查看当前的内核上下文中打开的文件,可以看到我们测试触发的trigger


(5)vm命令查看虚拟内存信息


(6)mount命令查看挂载状态


(7)net命令查看简单的网络信息

四、经验总结

 当 linux 系统内核发生崩溃的时候,可以通过 kdump 等方式收集内核崩溃之前的内存,生成一个转储文件 vmcore。通过分析该 vmcore 文件就可以诊断出内核崩溃的原因,通过kdump和crash的亲密配合,可以排除不少问题。

小讯
上一篇 2025-04-03 11:14
下一篇 2025-01-06 20:44

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/21448.html