利用crash分析“vm“内存快照

文档说明

由于云环境偶尔发生虚拟机hang死,手动重启无法触发系统panic,从而不能触发kdump产生vmcore文件进行原因分析;
此种情况下需要手动生成虚拟机内存快照,进而利用crash工具分析系统hang死的具体原因。此文档为具体的操作步骤。

注意:做完内存快照后再重启hang死的机器

1. 确定要创建的vm domain

#nova show $uuid |egrep “instance|hypervisor”
EX:
在这里插入图片描述
登录计算节点 #virsh list --all |grep instance-xxx
EX:
在这里插入图片描述

2. 用virsh命令创建内存快照

#virsh dump --memory-only
EX:
利用crash分析“vm“内存快照_第1张图片
利用crash分析“vm“内存快照_第2张图片

创建出raw格式的内存快照,大小为实际内存大小;(kdump产生的vmcore也为raw格式)
例:flavor为4C-8G 的虚拟机创建出的内存快照大小为8G

3. crash工具分析内存快照

为了考虑安全起见,本过程在测试虚拟机(后续简称“测试机”)操作;

1)创建测试机,绑定fip;将内存快照scp到测试机

2)在测试机安装与故障机器内核版本相同的debuginfo包

安装如下包:
kernel-debuginfo-xxx、kernel-debuginfo-common-xxx  (xxx为内核版本号,后续如此) 
注意:必须与故障机器(即hang死的机器内核版本相同)
Redhat操作系统可到官网下载对应内核版本的debuginfo包;
Centos操作系统可到http://debuginfo.centos.org/ 下载对应内核版本的debuginfo包;

若可连外网,可创建与hang死机器相同镜像的测试机;然后再测试机内yum安装。
RHEL:
`yum install kernel-debuginfo kernel-debuginfo-common
yum install kernel-debuginfo-$(uname -r)`
[参考:](https://access.redhat.com/solutions/9907)
Centos:
1、开启debuginfo源:
1`yum-config-manager --enable base-debuginfo`
2)或修改Debugionfo.repo配置文件enable=1
2、安装包
`debuginfo-install kernel`

EX:

1) 用户操作系统内核版本为:

在这里插入图片描述

2) 需要安装的debuginfo包:

利用crash分析“vm“内存快照_第3张图片注意:需要先安装kernel-debuginfo-common-xxx这个包;因为这个包是kernel-debuginfo-xxx的依赖包; 安装完成后,会生成/usr/lib/debug/lib/modules/xxx/vmlinux 文件;
EX:
在这里插入图片描述

3)利用crash工具进行分析

安装crash;yum install crash
如果测似机本地源没有的crash包的话,可安装rpm包

1、在测试机运行以下命令进入crash环境
#crash   /usr/lib/debug/lib/modules/xxx/vmlinux  $内存文件

EX:
利用crash分析“vm“内存快照_第4张图片

   可正常进入crash环境;因为是命令做的快照,而不是panic触发生成的vmcore,所以没有解析到panic task;直接查看log;此处log的输出猜测跟触发kdump产生的vmcore-dmesg.txt应该是一样的,或者大差不差。
2、在crash环境直接输入log命令分析日志

EX:
利用crash分析“vm“内存快照_第5张图片在log中有NMI、lockup相关字段,可看出cpu软锁死导致系统hang住了。并且导致锁死的进程为java:23838

在crash环境输入files <pid>   可查看此进程打开的具体文件

4. crash 分析vmcore常用命令

(1)bt命令:backtrace打印内核栈回溯信息,bt pid 打印指定进程栈信息;
(2)log命令:打印vmcore或者内存快照所在的系统内核dmesg日志信息;
(3)ps命令:ps 打印内核崩溃时,正常的进程信息;
带 > 标识代表是活跃的进程,ps pid打印某指定进程的状态信息;
(4)files命令:files pid 打印指定进程所打开的文件信息
(5)vm命令:vm pid 打印某指定进程当时虚拟内存基本信息
(6)kmem命令:查看当时系统内存使用信息
[参考](https://blog.51cto.com/u_15404950/5413333)

利用crash分析“vm“内存快照_第6张图片

你可能感兴趣的:(虚拟化,openstack,Linux,linux,openstack,云计算)