Windows 10的``系统''进程占用大量RAM


83

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

在此处输入图片说明

我已经阅读了一段时间,并确定可能是驱动程序泄漏了内存。因此,我得到了Windows驱动程序工具包,并通过poolmon跟踪了内存使用情况:

在此处输入图片说明

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

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

在此处输入图片说明

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


1
好的,我添加了能够找到的信息。检查它们
magicandre1981

1
这是系统的一项功能,它通过使用压缩而不是分页到磁盘来实际上将更多内容保留在RAM中。@ magicandre1981在此处具有正确的信息,应将其作为正确的答案。
Mani Gandham

poolmon显示的与smNp标签关联的14兆字节纯粹是微不足道的。您担心系统进程专用工作集中有1.3 GB的空间-为什么要关注14 MB的非页面缓冲池(根本不在任何进程的工作集中)?
Jamie Hanrahan

Answers:


13

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

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


1
这确实有效。即使使用数小时,System的内存使用量仍可恢复到〜0.1MB。谢谢!
Nayncore

26
通常情况下,如此高的内存使用率会引起内存泄漏,这是一个危险信号,但该内存已被合法地用作Windows 10的功能(请参见下面的magicandre的回答)。
Bigbio2002

7
这不是错误,不应禁用
phuclv


6
如果该功能导致持续的内存不足警告,则它不是好功能。现在,具有4GB RAM的Surface Pro完全无法用于开发,即使在具有8GB RAM的笔记本电脑上,我也不断收到这些警告。大拇指寻求解决方案!
Oleg I.

94

我查看了多个用户的xperf痕迹,此处ntoskrnl.exe!SmKmStoreHelperWorker内核功能开始分配内存。

屏幕截图
(点击图片放大)

我在sysinternals上发现了这一点。

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

Windows 10 Build 10525的公告中,Microsoft对其进行了一些解释

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

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

微软还在内部集线器中发布了更多详细信息。Winbeta创建了一篇文章,其中包含更多详细信息。

显然,造成这种情况的原因与Microsoft选择挂起的UWP应用程序不在前台有关,这与某些智能手机OS管理非常相似。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版本中,Microsoft更新了任务管理器中的描述,现在还显示SYSTEM进程承载compressed memory

在此处输入图片说明

避免混淆“高”用法。

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

在此处输入图片说明

但是看来Taskmgr没有显示此过程,只有ProcessExplorer / ProcessHacker可以显示它。Taskmgr仅在概述中显示压缩的内存量:

在此处输入图片说明

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

在此处输入图片说明

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


9
@Zaibis:我认为您的想法不是“丢弃1GB”。Windows已保留1GB,并将用于分配。您没有失去记忆。
Lightness Races in Orbit

12
长期以来,“未使用的内存就是浪费的内存”一直是OS X的口头禅。看起来Windows也加入了。
deceze 2015年

1
@ magicandre1981您是什么意思System Memory compression
user2284570

2
我无法详细回答。我只是得到了它的信息,这是设计使然,与内存压缩有关,这将在博客中进行解释。当我获得新信息时,我将更新我的帖子。
magicandre1981

2
@JosiahKeller“低内存”对话框与低虚拟内存有关。它几乎与物理内存(RAM)的使用或可用性无关。所有现代台式机操作系统都分别对它们进行了说明。
David Schwartz

0

我发现一个异常情况导致系统内存使用率很高,并希望将其包含进来,以防该信息使任何人受益。

如果您大量使用Microsoft的卷快照(软件快照,而不是硬件快照),则将更多的快照与大量的数据更改结合使用,则系统将消耗更多的RAM。

通常,除非您有巨大的卷(即64 TB)且快照之间具有数TB的增量,否则用于卷快照的RAM数量很少且不会被注意到。默认情况下,如果写入IO太高,快照将​​简单地删除自己,但是有一些方法可以防止这种情况,使您可以达到大量增量。

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

系统内存使用量为13GB

上面的系统进程以前使用时为24GB,观察到以下三个行为:

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

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

在这种情况下,这可能是正常现象,尽管我尚未与Microsoft确认。同时,我将向该服务器添加额外的32 GB RAM,以处理快照开销。

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


-1

在regedit密钥中禁用prefetcher:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParametersEnable Prefetcher的值可能约为23将其更改为0

接下来,您需要禁用Superfetch服务

  1. 搜索services.msc

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

我执行这些步骤,并且在玩游戏且通常使用PC时,该system过程仅使用28k


12
这是一个可怕的想法。使用预取/超取是有原因的。如果您认为自己可以比操作系统更好地管理内存,那真可悲。
b1nary.atr0phy 2015年

禁用预取(或“清理您的预取文件夹”)确实是一个很愚蠢的主意。预取不会导致系统使用更多的RAM。一旦启动 exe和dll,就可以加快加载速度。关于SuperFetch,Microsoft在Windows驱动器具有SSD的系统上默认情况下会禁用SuperFetch。他们觉得这样做是不值得的。我个人将其保持启用状态,因为我还有其他驱动器(非SSD)希望SF仍可运行。
杰米·汉拉罕
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.