事件 ID 41 的高级故障排除:“系统已重新启动,但未完全先关闭”

注意

家庭用户:本文适用于支持代理和 IT 专业人员。 如果你正在寻找有关蓝屏错误消息的详细信息,请访问 蓝屏错误疑难解答

关闭 Windows 的首选方法是选择“ 开始”,然后选择关闭或关闭计算机的选项。 使用此标准方法时,操作系统将关闭所有文件,并通知正在运行的服务和应用程序,以便它们可将任何未保存的数据写入磁盘并刷新任何活动缓存。

如果计算机意外关闭,Windows 会在下次启动计算机时记录事件 ID 41。 事件文本类似于以下信息:

Event ID: 41  
Description: The system has rebooted without cleanly shutting down first.

此事件指示某些意外活动阻止 Windows 正确关闭。 此类关闭可能是由电源中断或停止错误引起的。 如果可行,Windows 在关闭时会记录任何错误代码。 在下一次 Windows 启动的 内核阶段 ,Windows 会检查这些代码,并在事件 ID 41 的事件数据中包含任何现有代码。

EventData  
BugcheckCode 159  
BugcheckParameter1 0x3  
BugcheckParameter2 0xfffffa80029c5060  
BugcheckParameter3 0xfffff8000403d518  
BugcheckParameter4 0xfffffa800208c010  
SleepInProgress false  
PowerButtonTimestamp 0Converts to 0x9f (0x3, 0xfffffa80029c5060, 0xfffff8000403d518, 0xfffffa800208c010)  

排查意外关闭或重启问题时如何使用事件 ID 41

事件 ID 41 本身可能不包含足够的信息来显式定义所发生的情况。 通常,还必须考虑意外关闭时发生的情况 (例如电源故障) 。 使用本文中的信息来确定适合你的情况的故障排除方法:

  • 方案 1:计算机由于停止错误而重启,事件 ID 41 包含停止错误 (bug 检查) 代码
  • 方案 2:计算机重启,因为你按下并按住了电源按钮
  • 方案 3:计算机无响应或随机重启,未记录事件 ID 41 或事件 ID 41 条目列出了错误代码值 0

方案 1:计算机由于停止错误而重启,事件 ID 41 包含停止错误 (bug 检查) 代码

当计算机因停止错误而关闭或重启时,Windows 在事件 ID 41 中包括停止错误数据作为更多事件数据的一部分。 此信息包括停止错误代码 (也称为 bug 检查代码) ,如以下示例所示:

EventData  
BugcheckCode 159  
BugcheckParameter1 0x3  
BugcheckParameter2 0xfffffa80029c5060  
BugcheckParameter3 0xfffff8000403d518  
BugcheckParameter4 0xfffffa800208c010  

注意

事件 ID 41 包含 bug 检查十进制格式的代码。 大多数描述 bug 检查 代码的文档将代码称为十六进制值,而不是十进制值。 若要将十进制转换为十六进制,请执行以下步骤:

  1. 选择“开始”,在“搜索”框中键入“calc”,然后选择“计算器”。
  2. “计算器” 窗口中,选择“ 查看>程序员”。
  3. 在计算器的左侧,验证是否突出显示了 “Dec ”。
  4. 使用键盘输入 bug 检查代码的十进制值。
  5. 在计算器的左侧,选择“ 十六进制”。
    计算器显示的值现在是十六进制代码。

将 bug 检查代码转换为十六进制格式时,请验证“0x”指定后跟八位数字 (即,“x”后面的代码部分包含足够的零来填充) 八位数字。 例如,0x9F通常记录为0x0000009f,0xA记录为0x0000000A。 对于本文中的示例事件数据,“159”将转换为0x0000009f。

确定十六进制值后,使用以下引用继续故障排除:

方案 2:计算机重启,因为你按下并按住了电源按钮

由于重新启动计算机的此方法会干扰 Windows 关闭操作,因此建议仅在没有其他选择的情况下才使用此方法。 例如,如果计算机未响应,则可能需要使用此方法。 通过按住电源按钮重启计算机时,计算机会记录事件 ID 41,其中包含 PowerButtonTimestamp 条目的非零值。

<EventData>
<Data Name="BugcheckCode">0</Data>
<Data Name="BugcheckParameter1">0x0</Data>
<Data Name="BugcheckParameter2">0x0</Data>
<Data Name="BugcheckParameter3">0x0</Data>
<Data Name="BugcheckParameter4">0x0</Data>
<Data Name="SleepInProgress">0</Data>
<Data Name="PowerButtonTimestamp">131728546170882432</Data>
<Data Name="BootAppStatus">0</Data>
</EventData>

有关对无响应计算机进行故障排除时的帮助,请参阅 Windows 帮助。 请考虑使用“挂起”、“响应”或“空白屏幕”等关键字来搜索帮助。

方案 3:计算机无响应或随机重启,未记录事件 ID 41 或事件 ID 41 条目或列出错误代码值 0

此方案包括以下情况:

  • 关闭无响应计算机的电源,然后重新启动计算机。
    若要验证计算机是否无响应,请按键盘上的 Caps Lock 键。 如果按 Caps Lock 键时键盘上的 Caps 锁定 指示灯未更改,则计算机可能无响应 (也称为硬挂起) 。
  • 计算机重启,但不会生成事件 ID 41。
  • 计算机重启并生成事件 ID 41,但 BugcheckCodePowerButtonTimestamp 值为零。

在这种情况下,某些内容会阻止 Windows 生成错误代码或将错误代码写入磁盘。 某些内容可能会阻止对磁盘 (的写入访问,例如计算机) 无响应,或者计算机可能关闭太快而无法写入错误代码,甚至检测到错误。

事件 ID 41 中的信息提供了一些指示,指示从何处开始检查问题:

  • 不会记录事件 ID 41 或 bug 检查代码为零。 此行为可能表示电源问题。 如果计算机的电源中断,计算机可能会关闭,而不会生成停止错误。 如果它确实生成了停止错误,则可能不会完成将错误代码写入磁盘。 计算机下次启动时,它可能不会记录事件 ID 41。 或者,如果存在,则检查代码的 bug 为零。 原因可能是以下情况:

    • 对于便携式计算机,电池被移除或耗尽。
    • 对于台式计算机,计算机已拔出电源或发生停电。
    • 电源供电不足或出现故障。
  • PowerButtonTimestamp 值为零。 如果断开了未响应输入的计算机的电源,则可能会出现此行为。 原因可能是以下情况:

    • Windows 进程阻止了对磁盘的写入访问,并且你通过按住电源按钮至少四秒钟关闭了计算机。
    • 已断开对无响应计算机的电源。
  • 无法写入转储文件,并且所有值都为零。 例如:

    <EventData>
    <Data Name="BugcheckCode">0</Data>
    <Data Name="BugcheckParameter1">0x0</Data>
    <Data Name="BugcheckParameter2">0x0</Data>
    <Data Name="BugcheckParameter3">0x0</Data>
    <Data Name="BugcheckParameter4">0x0</Data>
    <Data Name="SleepInProgress">0</Data>
    <Data Name="PowerButtonTimestamp">0</Data>
    <Data Name="BootAppStatus">0</Data>
    </EventData>
    

    但是,volmgr 记录的事件 ID 为 46: 故障转储初始化失败!。 如果计算机在没有配置的转储文件的情况下启动,则可能会发生此事件。 默认转储文件是页面文件。

    事件日志的屏幕截图。

    因此,如果出现意外重启的情况,并且事件 ID 41 将所有值都设置为 0,检查如果事件 ID 为 46,则由 volmgr 提供。 如果是,检查页面文件配置。 由于 bug 检查,仍可能会发生意外的重新启动,但系统无法在事件 ID 41 中编写 bug 检查类型,也无法生成内存转储。 启动计算机时,请参阅事件 ID 46

通常,此方案中描述的症状表明存在硬件问题。 若要帮助找出问题,请执行以下步骤:

  • 禁用超锁。 如果计算机已启用超锁,请禁用它。 验证当系统以正确的速度运行时是否出现此问题。
  • 检查内存。 使用内存检查器确定内存运行状况和配置。 验证所有内存芯片是否以相同的速度运行,以及是否在系统中正确配置了每个芯片。
  • 检查电源。 验证电源是否有足够的瓦数来适当处理已安装的设备。 如果添加了内存、安装了较新的处理器、安装了更多驱动器或添加了外部设备,则此类设备可能需要比当前电源持续提供的能量更多。 如果计算机记录的事件 ID 为 41,因为计算机的电源中断,请考虑 (UPS) 获取不间断电源,例如电池备用电源。
  • 检查过热。 检查硬件的内部温度,并检查任何过热的组件。
  • 如果计算机是物理计算机,则它可能已被自动服务器恢复 (ASR 重新启动,) 检测到计算机没有响应的软件。
  • 如果系统在 Hyper-V 虚拟机 (VM) 中运行,并且不是群集环境的一部分,则系统可能已被 Hyper-V 检测信号功能重新启动。 如果启用此功能,并且主机未从 VM (检测到检测信号,可能是因为它没有响应) ,Hyper-V 将重启 VM。
  • 如果问题发生在 Hyper-V 群集环境中,则问题可能与 “为虚拟机启用检测信号监视 ”选项有关。 当尝试从群集环境中运行的虚拟机获取完整内存转储文件时,请参阅损坏的内存转储文件
  • 如果 VMWare VM 出现问题,则可能与 VMWare 中的检测信号功能相关,或者 VM 属于某些第三方群集。
  • 检查在关闭时间之前 (从应用程序和系统日志中的事件 ID 6008) 获取的任何可疑事件。

如果执行这些检查但仍无法隔离问题,请将系统设置为其默认配置,并验证问题是否仍然存在。

注意

如果看到包含 bug 的停止错误消息检查代码,但事件 ID 41 不包含该代码,请更改计算机的重启行为。 为此,请按照下列步骤操作:

  1. 右键单击“我的电脑”,然后选择“属性>”“高级”“高级”系统设置>。
  2. “启动和恢复 ”部分中,选择 “设置”。
  3. 清除“自动重启检查”框。

更多信息

有关事件 ID 41 的详细信息

当计算机意外关闭或重启时,会发生内核 Power 事件 ID 41 错误。 当基于 Windows 的计算机启动时,将执行检查以确定计算机是否已完全关闭。 否则,将生成内核 Power 事件 ID 41 消息。

事件 ID 41 用于报告发生意外情况,导致 Windows 无法正确关闭。 可能没有足够的信息来显式定义所发生的情况。 有关详细信息 ,请参阅内核 Power 事件 ID 41

  • 日志名称:系统
  • 产品:Windows 操作系统
  • ID:41
  • 来源:Microsoft-Windows-Kernel-Power
  • 级别:严重
  • 版本:6.1
  • 消息:系统已重新启动,但未首先完全关闭。 如果系统停止响应、崩溃或意外断电,则可能会导致此错误。

注意

.evtx 文件中显示的时间会根据系统的时间进行调整。 检查服务器的时区。

  • 事件 ID 41:此事件指示 Windows 重新启动,但未完全关闭。
  • 事件 ID 1074:当应用程序负责系统关闭或重启时,会记录此事件。 它还指示用户何时使用 “开始” 菜单或按 Ctrl+Alt+Del 重新启动或关闭系统。
  • 事件 ID 6006:此事件指示 Windows 已完全关闭。
  • 事件 ID 6008:此事件指示关闭不正确或脏。 当最近关闭是意外的时,会记录该消息。

在计算机关闭之前, shutdown.exe 将使用 Source=User32 和事件 ID 1074 在 Windows 系统日志中记录关闭事件,以及任何自定义消息 & 原因代码。

事件日志是判断从 shutdown.exe 触发的重新启动挂起的唯一方法。 该事件还记录用户名以及发出命令的 shutdown 日期和时间。

使用 shutdown.exe 重启服务器时,关闭过程通常允许 30 秒,以确保每个正在运行的服务都有时间停止。 服务按字母顺序关闭。 使用 NET STOPSC 按特定顺序手动停止服务可能会稍微快一些。

从 Windows 内部启动状态文件 (第 6)

Windows 使用启动状态文件 (%SystemRoot%\Bootstat.dat) 来记录它已经历系统生命周期的各个阶段(包括启动和关闭)的事实。

这允许启动管理器、Windows 加载程序以及启动修复工具检测异常关闭或完全关闭失败,从而为用户提供恢复和诊断启动选项,例如“上次已知良好”和“安全模式”。 此二进制文件包含系统通过这些信息报告系统生命周期以下阶段的成功:

  • 启动 (成功启动的定义与用于确定“上次已知良好”状态的定义相同,如前所述)
  • 关闭
  • 从休眠或挂起恢复

启动状态文件还指示用户上次尝试启动操作系统时是否检测到问题,以及显示的恢复选项,指示用户已意识到问题并采取了操作。 ntdll.dll 中 (Rtl) 的运行时库 API 包含 Windows 用于读取和写入文件的专用接口。 与 BCD 一样,用户无法对其进行编辑。

关于关闭

启动关闭后,Windows 会将WM_QUERYENDSESSION消息发送到具有用户界面 (UI) 线程的所有正在运行的应用程序。 此消息要求应用程序保存任何未保存的数据并正常终止。 如果应用程序未在特定时间限制内响应消息,Windows 会向应用程序发送WM_ENDSESSION消息,这会立即终止应用程序。

如果所有应用程序都响应WM_QUERYENDSESSION消息并正常终止,则 Windows 会在系统事件日志中记录干净关闭事件。 如果任何应用程序不响应消息或异常终止,Windows 会在系统事件日志中记录脏关闭事件。

意外关闭主要是由操作系统外部的组件引起的。

脏关闭是计算机系统在未经过适当的关闭过程的情况下关闭。 当电源突然切断或计算机通过按住电源按钮强制关闭时,可能会发生这种情况。 脏关闭可能会导致数据丢失或损坏,还可能导致启动问题。

脏关闭计数注册表是 Windows 注册表中的注册表项,用于跟踪计算机系统已关闭的次数,而无需执行适当的关闭过程。 排查启动问题以确定系统是否未正确关机时,此密钥非常有用。

还可以清除以下注册表项中的所有值 (,例如 DirtyShutdown、LastAliveStamp、TimeStampInterval) : Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Reliability。 这有助于防止在意外关闭后显示关闭事件跟踪器。