文章目录
- 一 系统环境
- 二 下载和安装kerner-debuginfo
- 三 启动crash
- 四 crash常用命令
一 系统环境
进行kdump分析的主机是CentOS-7.9系统。
[root@canway ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@canway ~]# uname -r
3.10.0-1160.el7.x86_64
检查 crash 工具的安装。
[root@canway ~]# rpm -qa|grep crash
crash-7.2.3-11.el7.x86_64
如果没有安装,则使用 yum 安装。
yum install -y crash
二 下载和安装kerner-debuginfo
查看 vmcore-dmesg.txt 文件,得到生成vmcore转储文件主机的内核版本信息。
接着下载软件的rpm包,按照下列的格式。
wget http://debuginfo.centos.org/${centos的版本号}/x86_64/kernel-debuginfo-${内核版本}.rpm
wget http://debuginfo.centos.org/${centos的版本号}/x86_64/kernel-debuginfo-common-x86_64-${内核版本}.rpm
本次分析的主机是centos6系统,内核是 2.6.32-431.el6.x86_64 。
所以获取软件包的命令如下:
wget http://debuginfo.centos.org/6/x86_64/kernel-debuginfo-2.6.32-431.el6.x86_64.rpm
wget http://debuginfo.centos.org/6/x86_64/kernel-debuginfo-common-x86_64-2.6.32-431.el6.x86_64.rpm
接着进行安装
rpm -ivh kernel-debuginfo-common-x86_64-2.6.32-431.el6.x86_64.rpm kernel-debuginfo-2.6.32-431.el6.x86_64.rpm
安装后,检查目录 /usr/lib/debug/lib/modules/ 下是否有对应内核版本的 vmlinux 文件
三 启动crash
启动命令:
crash 需要分析的vmcore文件 对应内核的vmlinux文件
[root@canway opt]# crash /opt/vmcore /usr/lib/debug/lib/modules/2.6.32-431.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——表示导致内核崩溃的进程的运行状态
以上信息可用于初步分析内核崩溃的原因,内核态有三种出错情况,分别是bug, oops和panic。bug属于轻微错误,oops代表某一用户进程出现错误,需要杀死用户进程,这时如果用户进程占用了某些信号锁,这些信号锁将永远不会得到释放,这会导致系统潜在的不稳定性。Panic是严重错误,代表整个系统崩溃。深入的分析需要使用更多的命令进行追踪和查找,并需要对内核的运行机制和内核开发编程有一定的了解。
四 crash常用命令
help——查看命令的帮助信息,也可用man命令
h——查看历史命令,相当于shell下的history
log——该命令用于打印出内存的日志信息
bt——该命令用于获取当前线程的调用堆栈
foreach bt——该命令用于获取所有线程的调用堆栈
ps——该命令用于查看内核崩溃时的进程信息
vm——该命令用于查看当前的内核上下文的虚拟内存信息
files——该命令用于查看当前的内核上下文中打开的文件
exit or q——退出Crash