Windows 10,“系统”进程占用大量 RAM

Windows 10,“系统”进程占用大量 RAM

自从我升级到 Windows 10 以来,我的系统一直过度消耗 RAM

在此处输入图片描述

我读了一些资料,确定这可能是驱动程序泄漏了内存。所以我自己弄了 Windows 驱动程序工具包,并使用 poolmon 跟踪内存使用情况:

在此处输入图片描述

但是,我真的不知道接下来该怎么做。标记为“smNp”的项目是导致此问题的罪魁祸首吗?我该如何从那里开始真正识别驱动程序?

我尝试了一些像“C:\Windows\System32\drivers>findstr /s smnp“但它没有返回任何结果。我还查看了pooltag.txt文件,这是我找到的描述:

在此处输入图片描述

是的,任何帮助都会很感激。提前致谢。

答案1

通过进入services.msc(通过Win+R)并禁用 Superfetch 可以完全解决这个问题。我不确定 Superfetch 是否已经损坏,还是“设计使然”。

此外,显然删除页面文件也会有同样的效果,但上述解决方案是更安全赌注。

答案2

ntoskrnl.exe!SmKmStoreHelperWorker我查看了几个用户的 xperf 跟踪,这里内核的功能开始分配内存。

截屏
(点击图片放大)

我发现系统内部

我向微软询问过这个问题,答案是这是设计使然。它与系统内存压缩有关。

Windows 10 Build 10525 发布后,微软对此做了一些解释

在 Windows 10 中,我们在内存管理器中添加了一个新概念,称为压缩存储,它是内存中的压缩页面集合。这意味着当内存管理器感受到内存压力时,它将压缩未使用的页面而不是将其写入磁盘。这减少了每个进程使用的内存量,使 Windows 10 能够同时在物理内存中维护更多应用程序。这也有助于在 Windows 10 中提供更好的响应能力。压缩存储位于系统进程的工作集中。由于系统进程将存储保存在内存中,因此当内存可供其他进程使用时,其工作集会变大。这在任务管理器中可见,也是系统进程似乎比以前的版本消耗更多内存的原因。

因此,它不会将内存数据写入页面文件,而是对其进行压缩。压缩后的内存会显示在系统进程中。

微软还在内部中心发布了更多细节。Winbeta 创建了一篇文章其中包含更多细节。

显然,这种情况的原因与微软选择在 UWP 应用不在前台时暂停它们有关,这与某些智能手机操作系统管理非常相似。Windows 8 用户明白(也许不明白)如果应用不在屏幕上,它们将不会运行,直到用户切换回它们。“全有或全无”的方法正在更新Windows 10 在页面文件和正常页面活动之间引入了一个层。现在,当面临内存压力问题时,MM 将确定哪些页面应该在称为修剪的过程中移动到已修改列表。修改后的列表是页面文件的第二列表,用于备份备用页面文件列表。如果另一个进程从备用列表中回收内存,并且原始进程开始查找其页面,则会捕获备份列表。Windows 10 MM 不会采取全有或全无的做法,而是会压缩未使用的页面,而不是将其写入磁盘。写入越少,磁盘操作就越少– 得益于压缩 – 现在更多的数据可以在内存中存储。

在此处输入图片描述

据 Windows 团队称,“实际上,压缩内存约占未压缩大小的 40%,并且由于典型设备运行典型工作负载,Windows 10 将页面写入磁盘的频率仅为以前版本操作系统的 50%。“如果一切按计划进行,Windows 用户可能会体验到所有设备的等待时间减少,以及配备基于闪存的硬盘的系统使用寿命延长

解压缩也是 Windows 10 的一大亮点。Windows 10 结合了并行性和顺序读取功能,一旦调用,就会将页面生成到内存中。新的解压缩功能应该会带来更快的体验,因为 Windows 10 会同时使用多个 CPU 解压缩数据并并行读取数据。旧版本的 Windows 可能会因为磁盘之间的传输速率而感觉迟缓。

微软还在 channel9 上发布了一个视频来解释该功能。

Windows 10 RTM 中的内存压缩
https://channel9.msdn.com/Blogs/Seth-Juarez/Memory-Compression-in-Windows-10-RTM

在这个视频中,Mehmet Iyigun 花了一些时间讨论为什么 Windows 10 中的系统进程占用了更多内存以及为什么这是一件好事。进程占用更多内存听起来像是一件坏事 - 直到我更多地了解了内存管理、分页和硬/软页面错误。事实证明,操作系统正在进行一些巧妙的优化,允许您的进程修剪部分内存,但不一定将其分页到磁盘。内存不仅保留在 RAM 中,而且还被压缩 - 使硬页面错误发生的可能性更小。结果应该会带来更流畅的体验。

在最新的 TH2 Builds 中,微软更新了任务管理器中的描述,现在还显示 SYSTEM 进程托管compressed memory

在此处输入图片描述

以避免对“高”使用率产生混淆。

在 2016 年 8 月发布的 Windows 10 周年更新中,微软将压缩提取到现在显示的一个名为的伪进程中,Memory Compression以便不再让用户困惑为什么 SYSTEM 有如此大的内存使用量:

在此处输入图片描述

但看起来 Taskmgr 并没有显示这个进程,只有 ProcessExplorer/ProcessHacker 才能显示它。Taskmgr 只在概览中显示了压缩内存的数量:

在此处输入图片描述

如果将鼠标悬停在 Taskmgr 中的已用内存图上,您会看到一个工具提示,其中显示了压缩的数据量。

在此处输入图片描述

在这个演示中,388MB 被压缩到 122MB,因此压缩后节省了 267MB。

答案3

我发现了一个导致系统内存使用率过高的异常情况,并希望将其包括在内,以防这些信息对任何人有益。

如果你大量使用微软的卷快照(软件快照,而不是硬件快照),那么你保存的快照越多,大的数据发生变化,则系统将消耗更多的 RAM。

通常,用于卷快照的 RAM 量很小,不会被注意到,除非您拥有巨大的卷(即 64 TB),并且快照之间的增量为数 TB。默认情况下,如果写入 IO 过高,快照将​​简单地删除自身,但有方法可以防止这种情况,从而允许您达到巨大的增量。

下面是一个极端情况,显示服务器的系统进程使用了​​ 13GB 的 RAM。该服务器只有两个卷快照,拍摄间隔为 15 天,每个快照之间写入了大约 10 TB 的数据。

系统内存使用量为 13GB

上面的系统进程之前的使用量为 24GB,并且观察到以下三种行为:

  1. 重新启动并重新登录后,系统会在空白屏幕上挂起一段时间,直到出现桌面。
  2. 在此挂起期间,拉出任务管理器(CTRL-SHIFT-ESC)显示系统内存使用量不断增加。
  3. 在此挂起期间,带有卷快照的磁盘执行了大量读取操作,但这些操作并未显示在性能监视器中。不过,由于磁盘使用了 iSCSI,网卡显示稳定的读取流约为 200 Mbps。

我怀疑是卷快照,因此我尝试删除最旧的快照,这会立即将系统的内存使用量从 24 GB 下降到 13 GB。

在这种情况下,这可能是正常行为,尽管我还没有向微软确认这一点。与此同时,我将向该服务器添加额外的 32 GB RAM 来处理快照开销。

(注意:这是一台运行 Windows 2016 的高容量备份服务器,并连接了 64 TB SSD iSCSI 驱动器。它在任何给定时间平均维护三个卷快照,每 15 天创建一个新快照。每个快照之间写入大约 10 TB 的数据)。

答案4

在注册表项中禁用预取程序:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters你可能有Enable Prefetcher一个值,2或者3将其更改为0

Superfetch接下来你需要在服务中禁用

  1. 搜索 services.msc

  2. 找到superfetch单击properties然后将其设置为disabled并停止该服务。

我按照这些步骤操作,当我玩游戏时,通常使用 PC,该system过程仅使用 28k

相关内容