当前位置:首页 > 技术分析 > 正文内容

一文让你快速读懂ESXi 主机紫屏的诊断报错信息

ruisui881个月前 (03-18)技术分析10

虚拟化运维管理人员在日常维护vSphere虚拟化环境时,会偶尔碰到ESXi主机紫屏的故障,特别是对于一些老旧服务器以及安装ESXi系统时,没有做兼容性检查,也没有按兼容性要求去升级IO设备的驱动和固件,这两种情况最容易导致紫屏。为此,小编查阅VMware官方相关资料,整理出这篇有关紫屏报错的文章,供小伙伴们参考。

一般情况下,ESXi 紫屏错误信息大致如下截图所示:

注意:本文将使用上述截图的截屏信息做示例。

在正式介绍紫屏之前,我们看下与紫屏密切相关的VMkernel,VMkernel 就是 ESXi 的操作系统核心,内核负责处理资源调度和设备 IO 事宜。设备 IO 由 VMware 网络和存储堆栈处理,后者也是虚拟文件系统、网络设备和控制物理设备的设备驱动程序之间的逻辑沟通层。

紫屏诊断信息解释说明

如果 VMkernel 出错,错误会显示在紫色诊断屏幕中,紫色诊断屏幕报错信息大致如下所示:

VMware ESX Server [Releasebuild-98103
PCPU 1 locked up.Failed to ack TLB invalidate.
frame=0x3a37d98 ip=0x625e94 cr2=0x0 cr3=0x40c66000 cr4=0x16c
es=0xffffffff ds=0xffffffff fs=0xffffffff gs=0xffffffff
eax=0xffffffff ebx=0xffffffff ecx=0xffffffff edx=0xffffffff
ebp=0x3a37ef4 esi=0xffffffff edi=0xffffffff err=-1 eflags=0xffffffff
*0:1037/helper1-4 1:1107/vmm0:Fagi 2:1121/vmware-vm 3:1122/mks:Franc
0x3a37ef4:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x3a37f10, 0x3a37f48
0x3a37f04:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x1, 0x14a03a0
0x3a37f48:[0x64bfa4]TLBDoInvalidate+0x38f stack: 0x3a37f54, 0x40, 0x2
0x3a37f70:[0x66da4d]XMapForceFlush+0x64 stack: 0x0, 0x4d3a, 0x0
0x3a37fac:[0x652b8b]helpFunc+0x2d2 stack: 0x1, 0x14a4580, 0x0
0x3a37ffc:[0x750902]CpuSched_StartWorld+0x109 stack: 0x0, 0x0, 0x0
0x3a38000:[0x0]blk_dev+0xfd76461f stack: 0x0, 0x0, 0x0
VMK uptime: 7:05:43:45.014 TSC: 1751259712918392
Starting coredump to disk Starting coredump to disk Dumping using slot 1 of 1...using slot 1 of 1... log

下面我们会拆分上述紫色诊断屏幕每个部分的内容来做一个说明,让大家快速了解每个部分的报错信息所代表的含义:

  • 产品和内部版本
    VMware ESX Server [Releasebuild-98103]
    紫色诊断屏幕中的此部分表示出错的产品和内部版本。在本示例中,产品是 VMware ESX Server 内部版本 98103。
  • 错误消息
    PCPU 1 locked up.Failed to ack TLB invalidate
    紫色诊断屏幕的此部分表示报告的错误消息。只能报告有限数量的错误消息。本文稍后会讨论这些错误消息。
  • CPU 寄存器
    frame=0x3a37d98 ip=0x625e94 cr2=0x0 cr3=0x40c66000 cr4=0x16c
    es=0xffffffff ds=0xffffffff fs=0xffffffff gs=0xffffffff
    eax=0xffffffff ebx=0xffffffff ecx=0xffffffff edx=0xffffffff
    ebp=0x3a37ef4 esi=0xffffffff edi=0xffffffff err=-1 eflags=0xffffffff
    出错时,这些值存储在物理 CPU 寄存器中。这些寄存器中的信息千差万别,具体取决于出现的 VMkernel 错误。这些寄存器只能用于内部调试 VMkernel 错误的核心转储。有关这些寄存器的详细信息,请参见 http://www.intel.com/products/processor/manuals/(针对 Intel)和 http://support.amd.com/us/psearch/Pages/psearch.aspx(针对 AMD)。在 AMD 网站中,搜索特定类型处理器的架构程序员手册。
    注意:截至 2013 年 3 月 28 日,上述链接正确无误。如果您发现某链接已损坏,请提供有关此文章的反馈,VMware 员工将会在必要时更新此文章。
  • 物理 CPU
    *0:1037/helper1-4 1:1107/vmm0:Fagi 2:1121/vmware-vm 3:1122/mks:Franc
    紫色诊断屏幕的此部分表示 VMkernel 出错期间运行指令的物理 CPU。在本示例中,0 旁边的 * 表示发生故障时物理 CPU 0 正在运行操作。新版本 ESX 不再使用 *,而是使用前缀字母 CPU。例如,如果新版本 VMware ESX 同样出现上述错误,则同一行会显示为:
    CPU0:1037/helper1-4 cpu1:1107/vmm0:Fagi cpu2:1121/vmware-vm cpu3:1122/mks:Franc。
    紫色诊断屏幕的此部分还描述了出错时 CPU 上运行的环境(进程)。在上述示例中,用户环境正在运行 helper1-4。
    注意:进程名称可能已截断。
  • 堆栈跟踪
    0x3a37ef4:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x3a37f10, 0x3a37f48
    0x3a37f04:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x1, 0x14a03a0
    0x3a37f48:[0x64bfa4]TLBDoInvalidate+0x38f stack: 0x3a37f54, 0x40, 0x2
    0x3a37f70:[0x66da4d]XMapForceFlush+0x64 stack: 0x0, 0x4d3a, 0x0
    0x3a37fac:[0x652b8b]helpFunc+0x2d2 stack: 0x1, 0x14a4580, 0x0
    0x3a37ffc:[0x750902]CpuSched_StartWorld+0x109 stack: 0x0, 0x0, 0x0
    0x3a38000:[0x0]blk_dev+0xfd76461f stack: 0x0, 0x0, 0x0
    堆栈表示出错时 VMkernel 正在执行的操作。在本示例中,VMkernel 正在尝试清除内存页表 (TLB)。此信息是一个重要工具,有助于通过评估出错时内核所执行的操作来诊断紫色屏幕错误。
  • 正常运行时间
    VMK uptime: 7:05:43:45.014 TSC: 1751259712918392
    此部分表示自上次启动以来服务器运行的时间。在本示例中,ESX 主机已运行了 7 天 5 小时 43 分 45.014 秒。TSC 值是服务器启动之后经过的 CPU 时钟频率循环次数。
  • 核心转储
    Starting coredump to disk Starting coredump to disk Dumping using slot 1 of 1...using slot 1 of 1... log
    紫色诊断屏幕的此部分表示正复制到 vmkcore 分区的 VMkernel 内存内容。

使用紫色诊断屏幕上的错误消息对 vmkernel 错误进行故障排除

紫色屏幕生成的 VMkernel 错误消息可用于确定问题原因。不过,产生的错误消息数是有限的。以下是已知的 VMkernel 错误消息列表。

  • 类型:控制台警告
    错误示例:COS Error: Oops
    描述:ESX 主机出现故障并在出现服务控制台警告时显示紫色屏幕。与大多数紫色屏幕错误不同的是,该错误并非由 VMkernel 触发。相反,它由服务控制台触发,并发生在 Linux 级别。这些紫色屏幕错误包含来自 Linux 内核的其他信息。有关控制台警告的详细信息,请参见 Understanding an "Oops" purple diagnostic screen (1006802)。
  • 类型:检测信号丢失
    错误示例:Lost Heartbeat
    描述:ESX VMkernel 和服务控制台 Linux 内核同时在 ESX 上运行。服务控制台 Linux 内核会运行一个称为 vmnixhbd 的进程,只要 VMkernel 能够分配和释放内存页,该进程便会向 VMkernel 发送检测信号。如果在 30 分钟超时时间之前未收到检测信号,VMkernel 会触发 COS 严重错误以及表明检测信号丢失的紫色诊断屏幕。有关检测信号丢失的详细信息,请参见 Understanding a "Lost Heartbeat" purple diagnostic screen (1009525)。
  • 类型:断言
    错误示例:ASSERT bora/vmkernel/main/pframe_int.h:527
    描述:断言错误属于软件错误,因为它们都与程序所基于的假设条件有关。此类型的紫色屏幕错误主要是由软件错误导致的。有关断言错误消息的详细信息,请参见 Understanding ASSERT and NOT_IMPLEMENTED purple diagnostic screens (1019956)。
  • 类型:未执行
    错误示例:NOT_IMPLEMENTED /build/mts/release/bora-84374/bora/vmkernel/main/util.c:83
    描述:代码遇到超出设计处理范围的情形时会出现未执行错误消息。有关详细信息,请参见 Understanding ASSERT and NOT_IMPLEMENTED purple diagnostic screens (1019956)。
  • 类型:转数已超出/可能出现死锁
    错误示例:Spin count exceeded (iplLock) - possible deadlock
    描述:线程尝试在代码关键部分执行时,VMware ESX 主机可能在紫色诊断屏幕上报告转数已超出且可能出现死锁。由于线程正尝试进入关键部分,因此,它需要执行自旋锁操作,以便先轮询互斥锁,然后再执行代码。线程在执行自旋锁操作期间会继续轮询互斥锁,但是,互斥锁轮询次数存在一定限制。有关转数已超出错误的详细信息,请参见 Understanding a "Spin count exceeded" purple diagnostic screen (1020105)。
  • 类型:无法确认 TLB 是否失效
    错误示例:PCPU 1 locked up.Failed to ack TLB invalidate.
    描述:物理 CPU 在尝试清除内存页表时出现故障。有关详细信息,请参见 Understanding a Failed to ack TLB invalidate purple diagnostic screen (1020214)。

紫色诊断屏幕还会以异常的形式出现。异常处理程序是一种计算机硬件机制,旨在处理正常执行流(除零、页面错误等)发生变动的某些情形。该处理程序并无跟踪机制,因此您需要通过日志记录确定处理程序是否出现问题(或通过单步调试)。以下是常见异常列表:

  • 类型:异常 13(一般保护错误)
    错误示例:#GP Exception(13) in world 4130:helper13-0 @ 0x41803399e303
    描述:在以下任一情况下都会出现一般保护错误(异常 13):正在请求的页面不属于请求该页的程序(未映射到程序内存中),或者程序无权在页面上执行读取或写入操作。有关异常 13 或页面错误的详细信息,请参见 Understanding Exception 13 and Exception 14 purple diagnostic screen events (1020181)。
  • 类型:异常 14(页面错误)
    错误示例:#PF Exception type 14 in world 136:helper0-0 @ 0x4a8e6e
    描述:正在请求的页面未成功加载到内存时出现页面错误(异常 14)。有关异常 14 或页面错误的详细信息,请参见 Understanding Exception 13 and Exception 14 purple diagnostic screen events (1020181)。
  • 类型:异常 18(计算机检查异常)
    错误示例:Machine Check Exception: Unable to continue
    错误示例:Hardware (Machine) Error
    描述:计算机检查异常 (MCE) 由硬件生成并通过主机进行报告。出现 MCE 事件时,请咨询您的硬件供应商。通过评估显示的信息,可以确定报告错误的单个组件。有关 MCE 的详细信息,请参见 Decoding Machine Check Exception (MCE) output after a purple screen error (1005184)。

如果 VMware ESX 或 ESXi 主机错误与未要求您参考一般文章的某个错误类似,请在 Knowledge Base 中搜索错误消息和堆栈跟踪信息。如果错误未记录在知识库中,请从 VMware ESX 主机收集诊断信息,然后提交支持请求。有关详细信息,请参见 Collecting diagnostic information for VMware products (1008524) 和 How to Submit a Support Request。

有关详细信息,请参见

  • Collecting diagnostic information for VMware products (1008524)
  • How to Submit a Support Request

使用模式分析对同一 ESX 主机上的多个 vmkernel 错误进行故障排除

同一 VMware ESX 主机上出现多个紫色诊断屏幕时,可以使用多个紫色诊断屏幕示例确定问题与硬件还是与软件有关。为此,请确定紫色诊断屏幕的以下部分是否存在一些模式:

  • 错误消息堆栈跟踪
    如果多个 vmkernel 错误中的错误消息和堆栈变化很大,则表明同一错误并不总是软件造成的。尽管不是十分确凿,但这很可能意味着硬件问题。 如果多个 vmkernel 中的错误消息和堆栈始终相同,则表明同一错误都是由软件造成的。尽管不是十分确凿,但这很可能意味着软件问题。 有关出现的错误消息的详细信息,请参见上述特定错误消息部分。
  • 物理 CPU
    如果多个 vmkernel 错误中的物理 CPU 值始终相同,则表明软件总是在同一个物理 CPU 上出现错误。尽管不是十分确凿,但这很可能意味着 CPU 问题。 有关详细信息,请参见 Determining if virtual machine and ESX host unresponsiveness is caused by hardware issues (1003560)。
  • 环境
    如果多个 vmkernel 错误中的环境值始终相同,则表明 vmkernel 从同一环境接收指令时出现错误。尽管不是十分确凿,但这很可能意味着发送指令的环境可能触发了 VMkernel 错误。

额外补充的相关信息

以下是完整的异常列表:

  • 异常类型 0 #DE:除法错误(Divide Error)
  • 异常类型 1 #DB:调试异常
  • 异常类型 2 NMI:不可屏蔽中断
  • 异常类型 3 #BP:断点异常
  • 异常类型 4 #OF:溢出(INTO 指令)
  • 异常类型 5 #BR:界限检查(BOUND 指令)
  • 异常类型 6 #UD:Opcode 无效
  • 异常类型 7 #NM:协处理器不可用
  • 异常类型 8 #DF:双重故障
  • 异常类型 10 #TS:TSS 无效
  • 异常类型 11 #NP:分段不存在
  • 异常类型 12 #SS:堆栈分段错误
  • 异常类型 13 #GP:一般保护错误
  • 异常类型 14 #PF:页面错误
  • 异常类型16 #MF:协处理器错误
  • 异常类型 17 #AC:对齐检查
  • 异常类型 18 #MC:计算机检查异常
  • 异常类型 19 #XF:SIMD 浮点异常
  • 异常类型 20-31:预留
  • 异常类型 32-255:用户定义(时钟调度程序)

注:本文参考VMware官网KB。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2867.html

分享给朋友:

“一文让你快速读懂ESXi 主机紫屏的诊断报错信息” 的相关文章

Gitlab之间进行同步备份

目前,我们公司有两个研发团队,分别在北京和武汉,考虑到访问速度的问题,原有武汉的研发环境在近端部署。也就是北京和武汉分别有两套独立的研发管理环境,虽然这解决了近端访问速度的问题,但是管理上较为分散,比如研发环境备份和恢复就是最重要的问题之一。最近,处于对安全性和合规性的考虑,希望将北京和武汉的源代码...

深度解析!AI智能体在To B领域应用,汽车售后服务落地全攻略

在汽车售后服务领域,AI智能体的应用正带来一场效率和专业度的革命。本文深度解析了一个AI智能体在To B领域的实际应用案例,介绍了AI智能体如何通过提升服务顾问和维修技师的专业度及维修效率,优化汽车售后服务流程。上周我分享了AI智能体+AI小程序To C的AI应用场景《1000%增长!我仅用一个小时...

别让“跑焦”毁所有!仅需这一项设置,即可显著改善镜头对焦精度

我常常会收到一些摄影爱好者的私信,也一直在努力的帮助大家解决更多摄影中常见问题。在我收到的所有问题中。有一个问题是最麻烦的,那就是“为什么我的图像看起来模糊?”。这个问题几乎每个人都遇到过,究其原因可以说是多种多样相对复杂。起初我一直认为是对焦问题所导致,也就有了我之前所写的“后按对焦”以及“对焦模...

12种JavaScript中最常用的数组操作整理汇总

数组是最常见的数据结构之一,我们需要绝对自信地使用它。在这里,我将列出 JavaScript 中最重要的几个数组常用操作片段,包括数组长度、替换元素、去重以及许多其他内容。1、数组长度大多数人都知道可以像这样得到数组的长度:const arr = [1, 2, 3]; console.log(a...

「干货」Vue+Element前端导入导出Excel

作者:xrkffgg转发链接:https://segmentfault.com/a/11900000189936191 前言1.1 业务场景由前台导入Excel表格,获取批量数据。根据一个数组导出Excel表格。2 实现原理2.1 引入工具库file-saver、xlsx、script-loader...

史上最全 vue-router 讲解 !!!

前端路由 前端路由是后来发展到SPA(单页应用)时才出现的概念。 SPA 就是一个WEB项目只有一个 HTML 页面,一旦页面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转。 前端路由在SPA项目中是必不可少的,页面的跳转、刷新都与路由有关,通过不同的url显示相应的页面。 优点:前...