桌面窗口管理器为什么会泄漏内存甚至崩溃?

桌面窗口管理器为什么会泄漏内存甚至崩溃?

我的桌面窗口管理器内存使用量持续飙升,导致它禁用 Aero,并提示内存不足。当我终止其进程时,DWM 重新启动并恢复正常。为什么会发生这种情况?我该如何纠正?我可以更改允许的内存量吗?

在此处输入图片描述

硬件:

  • 英特尔酷睿 2 四核 / EVGA 680i 主板
  • 8GB 爱国者 DDR2
  • (3x)Sapphire ATI Radeon HD 4760(多显示器设置,非 Crossfire 设置)

编辑:

新系统。现在使用的是 AMD Phenom 2 1055T,配备 16GB DDR3。同样安装 Windows 7 和相同的显卡(虽然是新主板,MSI nf980-g65 也有板载 HDMI,我现在也在使用)。 完全相同的问题

我发现当我打开浏览器和 Seesmic(一个 Silverlight 外浏览器应用程序)时,这种情况更常发生。

答案1

Windows 工程团队对此的官方非官方解释是,Windows 将 GPU 加速应用程序固定到主显卡上。工程团队表示,在非主显卡上使用 GPU 加速应用程序“非常低效”。

他们对于这一做法多年来一直有效这一事实不屑一顾,现在所有 GPU 渲染应用程序都面临着关闭 DWM 的高风险。

他们不知道如何修复,也声称无法重现,尽管重现过程很简单。以非 SLI/Crossfire 方式运行多个视频卡并输出到多个显示器。然后将半活动的 GPU 加速应用程序移至非主视频卡并监控共享内存 GPU 分配。它们将根据应用程序的 GPU API 活动而激增。只需在 GPU 加速浏览器(Chrome、IE、Firefox)中滚动或键入,您可能会面临 DWM 分配更多 GPU 共享内存的速度比释放速度更快的风险。

可能存在与再现有关的问题,这些问题可能是视频卡内存与系统内存的比例问题,但我可以验证任何具有多个视频卡设置的系统上的 GPU 共享内存峰值。它是否会降低 DWM。

DWM 有一个资源使用终止开关,当它超出相对于您的机器的资源分配时,它会启动。我不确定具有更多系统 RAM 的系统或具有更多 GPU RAM 的系统是否更容易受到影响,因为内存分配通常相对于您的 RAM 而言是多余的。在 3 个几乎相同但 RAM 量不同的系统上启动 10 个应用程序,您将获得不同的内存消耗。

再次,官方非官方对此的回应是 - 没有解决方案,并且您不应该在非 SLI/Crossfire 设置中运行多个视频卡。

在浏览器上禁用 GPU 加速也有效。据我所知,IE9 是唯一一款禁用 GPU 加速会导致性能大幅下降的浏览器。

当然,这个问题也迫使人们在运行 Flash/Silverlight/Movies 时要非常小心。在我的设置中,在我的第二块显卡上运行这些程序几乎是自杀行为,尽管它与我的主要显卡完全相同。

答案2

首先,我假设你正在运行 64 位版本的 Windows,否则,8GB 中的大部分都是无用的 :)

其次,我会检查您最近安装了哪些与 Windows 资源管理器集成的程序。例如,我曾多次目睹 TurtleSVN(SVN 集成件)出现故障。本质上,它会枚举您在资源管理器中接触的每个文件夹,预计需要将其与 SVN 存储库集成。有时这会导致速度变慢和泄漏 - 在 Windows 资源管理器内存空间中。

第三,尝试找出还有什么加载到您的资源管理器内存空间(使用 Process Explorer)并消除真正的罪魁祸首。您可以做的另一件事是启动到安全模式,看看问题是否也发生在那里。

第四,不要排除病毒或恶意软件——彻底检查其中任何一个。

答案3

我们最近就遇到了这种特殊情况,特别是在辅助 GPU 上的窗口的情况下,这种情况很容易在多台机器上复制。这是一个非常特殊的极端情况,但我敢打赌它适用于你。

这台机器的显卡是否升级过?如果升级过,这可能是以前的 DirectX 配置造成的;Windows 似乎并非在任何情况下都遵循正确的 DX9 升级路径,而是尝试运行新功能的软件模拟(他们称之为“10Level9”),这可能会导致辅助 GPU 上的硬件加速功能(例如 Aero)在 dwm 中出现过度负载。

对我们有用的修复方法如下:

  • 启动 regedit。(您可以在 Win7 的“开始”菜单中搜索它)。
  • 导航到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX
  • 检查“InstalledVersion”是否为“00,00,00,09,00,00,00,00”且“Version”是否为“4.09.00.0904”
  • 如果是这种情况,请删除整个“DirectX”键。(如果不是,我可能搞错了。不过 Windows 7 应该显示 6.01.something)
  • 重新启动机器,问题就解决了。

答案4

我遇到了同样的问题,发现注册表已关闭,正如 Shinrai 所建议的那样。但是,仅删除注册表并不能解决我的问题。我还从这里,这似乎解决了问题。

相关内容