(图片来源网络,侵删)
虚拟化运维管理人员在日常维护vSphere虚拟化环境时,会偶尔碰到ESXi主机紫屏的故障,特别是对于一些老旧服务器以及安装ESXi系统时,没有做兼容性检查,也没有按兼容性要求去升级IO设备的驱动和固件,这两种情况最容易导致紫屏。为此,小编查阅VMware官方相关资料,整理出这篇有关紫屏报错的文章,供小伙伴们参考。一般情况下,ESXi 紫屏错误信息大致如下截图所示:紫屏示例注意:本文将使用上述截图的截屏信息做示例。在正式介绍紫屏之前,我们看下与紫屏密切相关的VMkernel,VMkernel 就是 ESXi 的操作系统核心,内核负责处理资源调度和设备 IO 事宜。设备 IO 由 VMware 网络和存储堆栈处理,后者也是虚拟文件系统、网络设备和控制物理设备的设备驱动程序之间的逻辑沟通层。紫屏诊断信息解释说明如果 VMkernel 出错,错误会显示在紫色诊断屏幕中,紫色诊断屏幕报错信息大致如下所示:VMware ESX Server [Releasebuild-98103PCPU 1 locked up.Failed to ack TLB invalidate.frame=0x3a37d98 ip=0x625e94 cr2=0x0 cr3=0x40c66000 cr4=0x16ces=0xffffffff ds=0xffffffff fs=0xffffffff gs=0xffffffffeax=0xffffffff ebx=0xffffffff ecx=0xffffffff edx=0xffffffffebp=0x3a37ef4 esi=0xffffffff edi=0xffffffff err=-1 eflags=0xffffffff0:1037/helper1-4 1:1107/vmm0:Fagi 2:1121/vmware-vm 3:1122/mks:Franc0x3a37ef4:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x3a37f10, 0x3a37f480x3a37f04:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x1, 0x14a03a00x3a37f48:[0x64bfa4]TLBDoInvalidate+0x38f stack: 0x3a37f54, 0x40, 0x20x3a37f70:[0x66da4d]XMapForceFlush+0x64 stack: 0x0, 0x4d3a, 0x00x3a37fac:[0x652b8b]helpFunc+0x2d2 stack: 0x1, 0x14a4580, 0x00x3a37ffc:[0x750902]CpuSched_StartWorld+0x109 stack: 0x0, 0x0, 0x00x3a38000:[0x0]blk_dev+0xfd76461f stack: 0x0, 0x0, 0x0 VMK uptime: 7:05:43:45.014 TSC: 1751259712918392Starting 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=0x16ces=0xffffffff ds=0xffffffff fs=0xffffffff gs=0xffffffffeax=0xffffffff ebx=0xffffffff ecx=0xffffffff edx=0xffffffffebp=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, 0x3a37f480x3a37f04:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x1, 0x14a03a00x3a37f48:[0x64bfa4]TLBDoInvalidate+0x38f stack: 0x3a37f54, 0x40, 0x20x3a37f70:[0x66da4d]XMapForceFlush+0x64 stack: 0x0, 0x4d3a, 0x00x3a37fac:[0x652b8b]helpFunc+0x2d2 stack: 0x1, 0x14a4580, 0x00x3a37ffc:[0x750902]CpuSched_StartWorld+0x109 stack: 0x0, 0x0, 0x00x3a38000:[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。
0 评论