排查停止错误:最佳做法和转储配置建议

本文介绍当蓝屏发生时 Windows 执行的操作,并提供一些阻止和排查蓝屏问题的最佳做法。

发生停止错误时会发生什么情况

操作系统(OS)会持续监视自身,以验证它是否在预期的参数中运行。 如果情况并非如此,OS 将调用内核函数 KeBugCheckEx 以从此类不正常的方案中恢复。 有关详细信息,请参阅 KeBugCheckEx 函数(wdm.h)。 然后,KeBugCheckEx 函数将触发停止错误(也称为 bug 检查、死亡蓝屏和转储)并重新启动计算机。

以下部分使用 Bug 检查0x50中所述 的问题:PAGE_FAULT_IN_NONPAGED_AREA 解释发生停止错误时会发生什么情况。

停止错误0x50示例

此停止错误发生在以下方案中:

OS 正在尝试引用应在物理随机访问内存(RAM)中可用的内存部分。 但是,当 OS 访问该内存时,找不到内存,并且发生页面错误。

这违反了正常 OS 的参数。 因此,OS 调用 KeBugCheckEx 以受控方式关闭 OS,以防止进一步损坏。

此停止错误过程有三个阶段。

阶段 1:监视系统(持续)

在此阶段,内核会持续监视系统。 此外,在每次启动期间,会话管理器都会从转储配置的注册表项 HKLM\SYSTEM\CurrentControlSet\Control\CrashControl 中读取配置。

当 OS 检测到运行不正常的 OS 状态时, 将调用 KeBugCheckEx 函数。

阶段 2:停止错误

在停止错误阶段,OS 会显示此蓝色状态屏幕。 (这就是为什么停止错误被称为蓝屏的原因。

蓝屏的屏幕截图。

在屏幕截图中,可以看到黑色矩形 1 中的特定停止代码。 此停止代码有助于通过检查 Bug 检查代码引用来确定第一步。 在 Windows 中,有 300 多个不同的停止代码,每个代码在参考文章中详细介绍。

在黑色矩形 2 中,可以看到将 RAM 移动到页面文件的进度。 此操作基于在系统启动期间读取的 CrashControl 中的配置。

在大型系统上,此过程可能需要一些时间。 可以使用特定方案来解释这一点。

假设你有一个具有 1,024 GB RAM 的系统。 典型的硬盘驱动器(HDD)的磁盘 I/O 速度高达每秒 100 MB,而固态硬盘(SSD)可实现高达 500 MB 的速度。 当 OS 生成完整的转储时,请检查下表,了解基于磁盘配置所需的时间:

磁盘类型 磁盘速度 写入转储的时间(分钟)
HDD 100 MB/秒 10,485 秒(约 175 分钟)
SSD 500 MB/秒 2,097 秒(约 35 分钟)

注意

在物理系统中,计算机“基本输入输出系统”(BIOS)可能具有自动系统恢复(ASR)功能。 此功能定期检查 Windows 是否正在运行。 检查失败时,该功能会启动电源重置以恢复系统。 此行为会中断转储进程,因为 Windows 及其服务在第 2 阶段不再运行。

在黑色矩形 3 中,可以看到有关坠机事件所涉及的潜在提示。 如果消息与驱动程序或软件有关,则检查更新是否为有效选项。

将 RAM 移动到页面文件的过程完成后,页面文件将标记为转储。 在最后一步中,系统重启(基于配置)以完成阶段 2 并转到第 3 阶段。

阶段 3:转储创建

在 OS 启动期间,会话管理器进程(SMSS.exe)加载页面文件。 由于页面文件被标记为转储, 因此SMSS.exe 然后从页面文件中提取转储。 启动过程可能需要的时间可能比预期长,因为页面文件可能很大。 阶段 3 的最后一步是在系统事件日志中记录事件,其事件 ID 为 1001、级别:错误和源:BugCheck:

事件 ID 1001 的屏幕截图。

重要

此事件还包含具有参数的特定停止代码(见图片中的黑色矩形 1)。 可以在我们的公共文档中使用此信息详细了解 Bug 检查及其在 Bug 检查代码参考的含义。

此外,还可以查看转储位置(见图片中的黑色矩形 2)。

故障排除和防止停止错误的最佳做法

在大多数情况下,可以使用以下操作来解决停止错误。

确保运行的是 OS 的最新修补程序

Microsoft每周二(修补周期)每月向任何受支持的 OS 发布修补程序。 这些修补程序包含安全性和可靠性的改进。 建议在发布后不久安装它们。

确保软件和驱动程序是最新的

Microsoft与我们的合作伙伴密切合作,以确保其产品在正常运行的 OS 参数内也有效。 当向Microsoft报告停止错误时,我们的支持人员发现此错误与特定驱动程序或软件相关,Microsoft通知它们。 这通常会导致其软件更新。 因此,建议保持软件更新。

考虑更新到最新版本的 OS

有时,无法作为更新的一部分提供对 Windows 的改进,而只能作为操作系统新版本的一部分提供。 如果更新了 OS、软件和驱动程序,则 OS 升级可能是一种有效的方法。

通过停止代码引用自助

在 Bug 检查代码参考,Microsoft根据特定的停止代码提供指导和建议。 参考文章是信息的绝佳位置,也是检查特定 bug 检查代码的强建议。 Microsoft请注意,这可能是一个复杂的解决方案,如果需要更多帮助,请使用 Microsoft 提出支持案例。 确保有内存转储可用于加快分辨率。

确保 OS 可以捕获转储

如果未生成转储,请遵循 此建议

此建议取决于系统的大小,因为 RAM 和硬盘空间直接影响我们的建议。

系统内存高达 32 GB

  1. 确保页面文件设置为 RAM + 300 MB。
  2. 确保系统设置为 完整的转储。 为此,请导航到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControlCrashDumpEnabled 并将其设置为0x1

确保有足够的磁盘空间用于 Pagefile 和 memory.dmp 文件。

系统内存超过 32 GB

  1. 确保页面文件设置为 系统托管
  2. 确保系统设置为 自动内存转储。 为此,请导航到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl注册表项,并将 CrashDumpEnabled 设置为 0x7

通常,内核内存转储小于 40 GB。 自动转储与系统管理的页文件相结合,会尝试确保至少保留硬盘要求。 仍需确保有足够的磁盘空间用于 Pagefile 和 memory.dmp 文件。

如有必要,可以将 OS 配置为将转储文件 %SystemRoot%\Memory.dmp 保存到其他位置。 例如,可以将文件保存到驱动器 D,这是具有足够磁盘空间的第二个硬盘。 为此,请按照以下步骤操作:

  1. 导航到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl 注册表项。
  2. DumpFile 设置为 d:\Memory.dmp

此外,在大型系统上,请确保在 BIOS 中禁用 ASR。