如何修复 Windows 10 上的 MEMORY_MANAGEMENT 和 ATTEMPTED_WRITE_TO_READONLY_MEMORY BSOD

如何修复 Windows 10 上的 MEMORY_MANAGEMENT 和 ATTEMPTED_WRITE_TO_READONLY_MEMORY BSOD

因此,在使用全新安装的 Windows 7 x64 3 年后,由于工作原因,我必须升级到 Windows 10。

我从微软下载了最新的 Windows 10 Pro 构建映像 (1803),并使用 Rufus 3.1 创建了可启动闪存盘。

我在我的 SSD 上进行了全新安装(之前已格式化),使用电脑几天后,我开始收到随机 BSOD。每天大约 1 或 2 次。

BSOD 错误是 MEMORY_MANAGEMENT 或 ATTEMPTED_WRITE_TO_READONLY_MEMORY。

我尝试过的事情:

  • 运行 2 次 Windows 内存诊断程序。无错误。
  • 运行sfc /scannow。没有错误。
  • 将 GPU 驱动程序更新至最新版本 (Nvidia Geforce GTX 970)
  • 将 BIOS 更新至最新版本(华硕 Z-97E 上的 BIOS 从 0802 更新至 0803)

我在使用 Windows 7 的 3 年中可能只遇到过几次 BSOD,因此我认为这不是硬件相关的问题。在全新安装 Windows 10 后,BSOD 就开始出现了。

我如何打开 Windows 生成的 MEMORY.DMP,并在其中查找什么来查看导致 BSOD 的原因?

我还可以尝试其他什么吗?

更新 我使用 WinDbg x64 打开了 C:\MEMORY.DMP,结果如下: https://pastebin.com/B2pS9VZt

更新2 我刚刚又遇到了一次 BSOD。这次是SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
转储在这里:https://pastebin.com/0hckXpqP

更新 3 小型转储文件

更新 4
我整晚都在运行内存测试,发现了很多错误。我猜我的内存确实有问题。我们确定这是有问题的内存吗?我更换后就能修好,对吧?不知道哪根内存有问题?必须移除它们并再次运行内存测试才能知道是哪根?
结果如下:http://ancient-name.surge.sh/

答案1

此类崩溃最有可能的原因是内存故障。根据 harrymc 的建议,首先要尝试的是运行内存测试程序,例如Windows 内存诊断(包含在 Windows 中),原始MemTest86(由 PassMark Software 维护),或开源Memtest86+.(我添加了此部分以便于其他可能遇到类似问题但尚未尝试过内存测试的读者。)


问题作者可以跳过此部分。它被保留以供其他读者参考。

如果内存测试通过,则可能是处理器有故障。

处理器的集成内存控制器 (IMC)有时会导致内存问题。简单的内存操作(如从特定内存位置读取数据)可能正常工作,但处理器执行基本内存管理操作的能力(包括虚拟内存,未经内存测试程序测试。

另一种可能是故障缓存缓存是处理器内部用于加速内存访问的少量内存。虽然您的处理器应该能够检测缓存错误(并生成机器检查异常当发生这种情况时(导致WHEA_UNCORRECTABLE_ERRORBSOD),缓存中的数据损坏并导致内存损坏而处理器本身却没有察觉,这并非不可能。内存测试软件也无法检测到这种情况。

要检查 IMC,请下载英特尔处理器诊断程序并运行 IMC 测试。要检查处理器缓存,请下载Prime95并运行小型 FFT 测试(您的处理器可能会变得非常热,或者风扇可能会发出很大的声音;这是正常的)。如果任何一个测试失败,您可能需要更换处理器。(我假设处理器和内存不是超频或以其他超出规格的方式操作。


由于您已运行内存测试并发现错误,因此显然需要更换一个或多个内存模块。我可以从您发布的报告中收集更多信息。

错误发生在内存的一个特定区域,大约 0x19BDD79F0,这将问题限制在一个模块上。地址暗示,但实际上不是确认问题出在 Patriot 内存模块之一。

由于大多数系统(包括您的系统)上的内存都是成对使用,因此请尝试移除两个都更换任一品牌的内存模块并重新运行测试。如果此方法无效,请重新安装您移除的模块并移除另一对。如果问题解决,您可以正常使用系统,直到您获得替换内存模块。


需要注意的是,Windows 10 使用了更先进的内存管理技术,包括虚拟内存压缩在内存有限的系统上最大化性能。尽管您的系统有 16 GB 内存,但 Windows 仍会默认压缩内存中的数据(我的台式机有 32 GB,这里也不例外)。在压缩和解压缩数据期间很容易检测到内存错误,并且会立即导致操作失败,从而导致系统崩溃。影响未压缩应用程序或其他数据的内存错误会“简单地”导致应用程序崩溃或文件损坏(尽管它仍然会导致操作系统崩溃)。因此,Windows 10 对内存错误的敏感度比以前版本的 Windows 更高。

答案2

根据转储,错误来自两个来源:IRQ 和 int 3 指令。IRQ 表示中断调用的某个驱动程序存在故障 - 这意味着您必须检查此系统中安装的所有驱动程序,看是否有一个存在故障。

Int 3 是调试器中断,这意味着有些软件(也可能是驱动程序)在不应该出现的地方调用断点(int 3)。这可能发生在调试版本的软件上。

大多数此类 BSOD 都来自编写不正确的驱动程序,因此我会从这里寻找问题。卸载所有驱动程序(或重新安装操作系统)并逐一检查。在每个驱动程序之间对系统进行一些较大的使用(例如进行 7-zip 基准测试),您就会找到有问题的驱动程序。

问题的另一个来源可能是 CPU 或 RAM 超频,为了检查这一点,请在 BIOS 中将系统配置为仅使用所提供硬件的标称值。仅此而已。

答案3

我在小型转储中看到您还遇到了 SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION 崩溃情况。我还注意到,所有崩溃都发生在内核或 HAL 内部,但从未发生在任何设备驱动程序内部,因此问题不在于特定的故障设备。

因此,您的内存很可能存在缺陷。Windows 10 可能正在使用之前未使用过的 RAM 缺陷部分。

首先查看事件查看器,看看它是否包含任何有用的信息。

然后我建议运行 MemTest86

MemTest86 是适用于 x86 计算机的原创、免费、独立内存测试软件。MemTest86 从 USB 闪存驱动器或 CD 启动,并使用一系列综合算法和测试模式测试计算机中的 RAM 是否存在故障。

您也可以尝试使用 RAM 条的子集进行启动,并遵循主板指定的安排,以便找到坏的 RAM 条。


关于您的 MemTest86 结果的注释:您有数千个错误。内存寻址测试已通过,因此问题不在于内存控制器。错误在于 RAM 本身,其中存储的数据在读取时不正确。这表明您的内存条中至少有一个是坏的,问题不在于 CPU 或主板。

你可以做什么

您可以取出内存条并在子集上运行 MemTest86。您的主板是华硕 Z97-E,需要在 DIMM_A1 和 DIMM_B1 中至少有两个内存条。下图来自手动的

图像

放入任意两根相同品牌的棒子并进行测试,结果会缩小范围,只有 Corsair 或 Patriot 棒子。当您知道这两根棒子中只有一根(希望)是坏的时,您可以尝试混合使用不同制造商的棒子。它们的规格似乎相同,所以这可能有效。

也可能在 DIMM_A1 中只放置一根内存条就足以满足 MemTest86 的要求。手册中的图表不清楚,可能表明一根内存条可以在 DIMM_A1 或 DIMM_B1 中工作。即使情况并非如此,有时非推荐的配置仍可能在某种程度上起作用,具体取决于主板。

相关内容