百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

虚拟机panic问题排查_虚拟机损坏怎么解决

suiw9 2025-02-17 14:04 14 浏览 0 评论

问题分析

一台aws云主机先后crash了几次,查看系统dmes日志,排查crash原因

[789106.990754] Uhhuh. NMI received for unknown reason 21 on CPU 6.
[789106.990754] Do you have a strange power saving mode enabled?
[789106.990755] Kernel panic - not syncing: NMI: Not continuing
[789106.990755] CPU: 6 PID: 2644936 Comm: server Not tainted 4.14.81.bm.21-amd64 #1
[789106.990755] Hardware name: Amazon EC2 m5a.2xlarge/, BIOS 1.0 10/16/2017
[789106.990756] Call Trace:
[789106.990756]  dump_stack+0x5c/0x85
[789106.990756]  panic+0xe4/0x232
[789106.990756]  ? printk+0x52/0x6e
[789106.990757]  nmi_panic+0x35/0x40
[789106.990757]  unknown_nmi_error+0x6f/0x80
[789106.990757]  do_nmi+0xe5/0x130
[789106.990757]  nmi+0x83/0xcc

结合内核源码查看发生的panic的地方:

源码地址: https://elixir.bootlin.com/linux/v4.7/source/arch/x86/kernel/nmi.c#L75
unknown_nmi_error(unsigned char reason, struct pt_regs *regs)
{
        int handled;

        /*
         * Use 'false' as back-to-back NMIs are dealt with one level up.
         * Of course this makes having multiple 'unknown' handlers useless
         * as only the first one is ever run (unless it can actually determine
         * if it caused the NMI)
         */
        handled = nmi_handle(NMI_UNKNOWN, regs);
        if (handled) {
                __this_cpu_add(nmi_stats.unknown, handled);
                return;
        }

        __this_cpu_add(nmi_stats.unknown, 1);

        pr_emerg("Uhhuh. NMI received for unknown reason %02x on CPU %d.\n",
                 reason, smp_processor_id());

        pr_emerg("Do you have a strange power saving mode enabled?\n");
        if (unknown_nmi_panic || panic_on_unrecovered_nmi)
                nmi_panic(regs, "NMI: Not continuing");

        pr_emerg("Dazed and confused, but trying to continue\n");
}

从源码可以看到直接原因是nmi不可中断导致系统crash

那到底是什么原因导致nmi呢? 谷歌了一圈,众说纷纭,有说软件bug的,有说硬件bug的。

可能原因1: 软件bug

查找在crash的时间点左右的atop系统快照

atop -y -r  atop_20210225_until10:27:29


能定位到该pid为业务进程game的子进程。有可能是该子进程异常导致了系统panic(只是怀疑)

不过我觉得用户空间的操作不太可能引起系统crash

可能原因2: 硬件问题

case1,主板电源的机器:
https://community.amd.com/t5/server-gurus-discussions/solved-uhhuh-nmi-received-for-unknown-reason/td-p/74321

After some googleing, it looks like it might be a RAM problem.
As it is a production server with FC2 (cannot run OMSA except
with OMSA Knoppix), I'd appreciate some hints on what to look at.

case2: redhat官方的描述

当中断被禁用或指示CPU忽略该中断时,该中断被称为屏蔽。阿非屏蔽中断(NMI)不能被忽略,并且通常只用于关键硬件错误。

综合,以上原因,分别从不同方向去排查。

  1. 统计挂掉的机器的ip,看硬件分布,看出问题的机器是否都在同一台母机,可能是单个母机环境问题导致的panic,结论是虚拟机都非亲和性的分布在不同的物理机上,可以排除是问题的虚拟机在某个母机上的问题;
  2. 分析kdump文件(前提是机器开启了kdump):crash /usr/lib/debug/boot/vmlinux-4.14.81.bm.21-amd64 dump.202102251020,不同机器,命令情况不一样
OAD AVERAGE: 0.74, 0.77, 0.71
       TASKS: 766
    NODENAME: xxxx
     RELEASE: 4.14.81.bm.21-amd64
     VERSION: #1 SMP Debian 4.14.81.bm.21 Wed Apr 29 07:43:38 UTC 2020
     MACHINE: x86_64  (2199 Mhz)
      MEMORY: 31.4 GB
       PANIC: "Kernel panic - not syncing: NMI: Not continuing"
         PID: 2644936
     COMMAND: "server"
        TASK: ffff9a3fd280d000  [THREAD_INFO: ffff9a3fd280d000]
         CPU: 6
       STATE: TASK_RUNNING (PANIC)

crash> bt
PID: 2644936  TASK: ffff9a3fd280d000  CPU: 6   COMMAND: "server"
 #0 [ffffa6ee8de47d70] machine_kexec at ffffffff9905749b
 #1 [ffffa6ee8de47dc8] __crash_kexec at ffffffff99110d31
 #2 [ffffa6ee8de47e88] panic at ffffffff9907cbb2
 #3 [ffffa6ee8de47f10] nmi_panic at ffffffff9907c795
 #4 [ffffa6ee8de47f18] unknown_nmi_error at ffffffff990280df
 #5 [ffffa6ee8de47f30] do_nmi at ffffffff99028365
 #6 [ffffa6ee8de47f50] nmi at ffffffff998018e3
    RIP: 000000000040e35a  RSP: 000000c0bf98d500  RFLAGS: 00000293
    RAX: 000000000000004b  RBX: 000000000000009b  RCX: 000000c098114760
    RDX: 0000000000000000  RSI: 00000000017602e0  RDI: 00000000000000d0
    RBP: 000000c0bf98d530   R8: 0000000000000000   R9: 000000c057332b08
    R10: 0000000000000000  R11: ffffffffffffffff  R12: 0000000000000000
    R13: 0000000000000080  R14: 0000000000000149  R15: ffffffffffffffff
    ORIG_RAX: ffffffffffffffff  CS: 0033  SS: 002b
crash> quit

能得出基本结论: aws的机器给虚拟机发了nmi中断,大概率是硬件问题

只能提交dmesg日志给aws的硬件工程师排查。

如何规避?

临时设置内核参数,关闭nmi panic

cat /etc/sysctl.conf
kernel.unknown_nmi_panic=0
kernel.panic_on_unrecovered_nmi = 0

sysctl -p 生效

分析工具

  1. dmeg日志
  2. Kdump
  3. Atop工具
  4. crash命令

相关推荐

10款超实用JavaScript音频库(js播放音频代码)

HTML5提供了一种新的音频标签实现和规范用一个简单的HTML对象而无需音频插件来控制音频。这只是一个简单的整合这些新的HTML5音频特征及使用JavaScript来创建各种播放控制。下面将介绍10款...

Howler.js,一款神奇的 JavaScript 开源网络音频工具库

o...

PROFINET转Modbus网关——工业协议融合的智能枢纽

三格电子SG-PNh750-MOD-221,无缝连接Profinet与Modbus,赋能工业物联产品概述...

简单实用的Modbus类库,支持从站和DTU

一、简介...

[西门子PLC] S7-200 SMART PROFINET :通过GSD组态PLC设备

从S7-200SMARTV2.5版本开始,S7-200SMART开始支持做PROFINETIO通信的智能设备。从而,两个S7-200SMART之间可以进行PROFINETI...

Modbus(RTU / TCP)有什么异同(modbus tcp和tcp)

Modbus是一种广泛使用的工业自动化通信协议,它支持设备之间的数据交换。Modbus协议有两个主要的变体:ModbusRTU(二进制模式)和ModbusTCP(基于TCP/IP网络的模式)。尽管...

Modbus通信调试步骤详解(modbus调试工具怎么用)

Modbus通信调试步骤详解  Modbus通信分为串口和以太网,无论是串口还是以太网,只要是标准Modbus,就可以用Modbus模拟器进行调试。按以下几步进行调试。...

理解Intel手册汇编指令(intel 汇编指令手册)

指令格式...

「西门子PLC」S7-200 SMART的Modbus RTU通讯

S7-200SMART集成的RS485端口(端口0)以及SBCM01RS485/232信号板(端口1)两个通信端口可以同时做MODBUSRTU主站,或者一个做MODBUSRTU主站一个做MO...

InfiniBand网络运维全指南:从驱动安装到故障排查

一、InfiniBand网络概述InfiniBand(直译为“无限带宽”技术,缩写为IB)是一种用于高性能计算的计算机网络通信标准,具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。它...

一加回归 OPPO,背后的秘密不可告人

有这样一个手机品牌,它诞生于互联网品牌。在大众群体看来,它的身世似乎模糊不清,许多人以为它是国外品牌。它的产品定位是极客群体,深受国内发烧友,甚至国外极客玩家喜爱。...

[西门子PLC] S7-200SMART快速高效的完成Modbus通信程序的设计

一、导读Modbus通信是一种被广泛应用的通信协议,在变频器、智能仪表还有其他一些智能设备上都能见到它的身影。本文呢,就把S7-200SMART系列PLC当作Modbus主站,把...

狂肝10个月手搓GPU,他们在我的世界中玩起我的世界,梦想成真

梦晨衡宇萧箫发自凹非寺量子位|公众号QbitAI自从有人在《我的世界》里用红石电路造出CPU,就流传着一个梗:...

[西门子PLC] 博途TIA portal SCL编程基础入门:1-点动与自锁

一、S7-SCL编程语言简介...

工作原理系列之:Modbus(modbus工作过程)

MODBUS是一种在自动化工业中广泛应用的高速串行通信协议。该协议是由Modion公司(现在由施耐德电气公司获得)于1979年为自己的可编程逻辑控制器开发的。该协议充当了PLCS和智能自动化设备之间的...

取消回复欢迎 发表评论: