2015-08-07 04:17:19 +0000 2015-08-07 04:17:19 +0000
82
82

Windows 10,"系统 "进程占用大量内存。

自从我升级到Windows 10后,我的系统一直过度消耗内存

我看了一下,确定很可能是驱动泄露内存。于是,我给自己买了Windows驱动套件,并用poolmon跟踪内存使用情况:

然而,我真的不知道该如何继续下去。标记为 “smNp "的项目是这个问题的罪魁祸首吗?我如何才能真正识别出驱动程序?

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

所以是的,任何帮助都将是感激的。先谢谢你了。

答案 (4)

93
93
93
2015-08-07 04:20:09 +0000

我看了几个用户的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可能会因为磁盘之间的传输速率而感到迟缓。

微软还在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月发布的Window 10周年更新中,微软将压缩提取到现在显示为一个名为Memory Compression的伪进程中,不再让用户困惑为什么SYSTEM的内存使用率如此之高。

但貌似Taskmgr并没有显示这个进程,只有ProcessExplorer/ProcessHacker能够显示。Taskmgr只在概览中显示压缩内存的数量。

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

在这个演示中,388MB被压缩为122MB,所以267MB被压缩后保存了下来。

13
13
13
2015-08-09 23:24:30 +0000

通过进入services.msc(通过Win+R)并禁用Superfetch完全可以解决这个问题。我不知道Superfetch是目前来说就是坏了,还是 “设计 "出来的。

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

0
0
0
2019-08-31 16:21:39 +0000

我发现了一个导致系统内存使用率高的异常情况,想把它包括进去,以防这些信息对任何人都有好处。

如果你大量使用微软的卷快照(软件快照,不是硬件快照),你保存的快照越多,加上**大的数据变化,那么系统就会消耗更多的内存。

通常情况下,卷快照使用的RAM量很小,不会被注意到,除非你有一个巨大的卷(即64TB),快照之间有多字节的三角区。默认情况下,如果写入IO过高,快照会自动删除,但是有一些方法可以防止这种情况,让你达到巨大的deltas。

下面是一个极端的案例,显示了一个服务器的System进程使用了13GB的RAM。这台服务器只有两个卷快照,相隔15天,每个快照之间写了大约10TB的数据。

上述System进程之前的使用量为24GB,观察到以下三种行为。

1.重启并重新登录后,系统会在空白屏幕上挂起一段时间,直到出现桌面。 2. 在这次挂起期间,调出任务管理器(CTRL-SHIFT-ESC)显示系统内存使用量增加。 3. 在这次挂起期间,带有卷快照的磁盘进行了大量的读取,但在性能监视器中没有显示出来。虽然,因为磁盘利用了iSCSI,网卡显示的读取流稳定在200Mbps左右。

我怀疑是卷快照的问题,于是我试着删除了最老的快照,系统的内存使用量瞬间从24GB降到了13GB。

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

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

-1
-1
-1
2015-08-20 11:08:59 +0000

在regedit键中禁用预取器:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters你的值可能是Enable Prefetcher2,所以将其改为3

接下来你需要在服务中禁用0 1.搜索services.msc

  1. 找到Superfetch点击superfetch,然后设置为properties,也要停止服务。

我做了这些步骤,当我在游戏和正常使用PC时,disabled进程只用了28k。