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

Nay*_*ore 86 memory windows drivers memory-leaks windows-10

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

在此处输入图片说明

我一直在阅读并确定它可能是驱动程序泄漏内存。所以我得到了自己的 Windows 驱动程序工具包并使用 poolmon 跟踪内存使用情况:

在此处输入图片说明

但是,我真的不知道如何从这里开始。标记为“smNp”的项目是否是此问题的罪魁祸首?我如何从那里到实际识别驱动程序?

我尝试了一些东西,如“C:\ WINDOWS \ System32 \ drivers下> FINDSTR / s的SMNP ”但它返回任何结果。我还查看了 pooltag.txt 文件,这是我找到的描述:

在此处输入图片说明

所以是的,任何帮助将不胜感激。提前致谢。

mag*_*981 97

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

截屏
(点击图片放大)

我在sysinternals上发现了这一点。

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

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 可能会感觉缓慢。

微软还在频道 9 上发布了一个视频,解释了该功能。

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

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

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

在此处输入图片说明

以避免混淆“高”用法。

在 2016 年 8 月发布的 Window 10 Anniversary Update 中,微软将压缩提取到现在显示在一个伪进程中,称为Memory Compression不再让用户混淆为什么 SYSTEM 有如此大的内存使用:

在此处输入图片说明

但是看起来 Taskmgr 没有显示这个过程,只有 ProcessExplorer/ProcessHacker 能够显示它。Taskmgr 仅在概览中显示压缩内存量:

在此处输入图片说明

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

在此处输入图片说明

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

  • “未使用的内存就是浪费的内存”长期以来一直是 OS X 的口头禅。看起来 Windows 也加入了进来。 (12认同)
  • @Zaibis:我认为这个想法是你没有“减少 1GB”。1GB 已被 Windows 保留,将用于分配。你还没有_失去_记忆。 (9认同)
  • 我无法详细回答这个问题。我只得到了它是设计使然,与内存压缩有关的信息,这将在博客文章中解释。当我获得新信息时,我会更新我的帖子。 (2认同)
  • @JosiahKeller “低内存”对话框是关于低虚拟内存的。它几乎与物理内存 (RAM) 的使用或可用性无关。它们由所有现代桌面操作系统单独计算。 (2认同)

den*_*den 13

通过进入services.msc(via Win+R) 并禁用 Superfetch 完全解决了这个问题。我不确定 Superfetch 是现在坏了还是“设计使然”。

此外,显然摆脱分页文件将具有相同的效果,但上述解决方案是一个更安全的选择。

  • 虽然通常如此高的内存使用量是内存泄漏的危险信号,但此内存被合法地用作 Windows 10 的功能(请参阅下面的 magicandre 的回答)。 (26认同)
  • 这不是一个错误,不应该被禁用 (7认同)
  • 如果该功能导致持续的低内存警告,则它不是好的功能。现在我的带有 4GB RAM 的 Surface Pro 完全无法用于开发,即使在带有 8GB RAM 的笔记本电脑上我也经常收到这些警告。大拇指寻求解决方案! (6认同)