有可用的物理RAM时,为什么Windows 7使用页面文件?


43

我正在使用Windows 7 64位和8G内存。使用一段时间后,我觉得Windows变慢了。驱动器运转异常。当我查看资源监视器和磁盘活动时,我看到了一些使用页面文件(c:\ pagefile.sys)的实例。我检查了物理内存,然后看到大约2.3G可用内存和700M可用内存。

Windows为什么不使用更多的可用内存和更少的页面文件?是否需要留下x数量的免费ram,那将是多少?它是物理内存的百分比吗?

我的计划是为主驱动器配备更多内存和SSD。同时,我表现不佳。


1
仅仅因为它正在写/读到页面文件并不意味着我们正在使用它,它可能只是在更新它,以便在有突然需求时可以更快地转储内存。我建议运行性能监视器 或进行深入的诊断,看看是什么原因导致了缓慢的运行。
斯科特·张伯伦

在99.(9)%的情况下,拥有超过8GB的RAM不会提高性能。您是否在主板上塞满了便宜的低频/高延迟RAM芯片?替换它们比添加更多将是一个更好的主意。
kotekzot 2012年

3
@kotekzot这取决于。我通常发现在大多数瓶颈中RAM延迟都可以忽略不计。如果他有足够的内存来选择所有应用程序时不必等待页面被分页,那么下一个最大数量级的瓶颈几乎总是硬盘驱动器,而SSD可以解决该问题起来
达斯Android

@如果我有更多的RAM,则可以将页面文件放在比HD访问快得多的ramdisk中。这是戴尔笔记本电脑工作站级别的产品,因此我确信这些组件并不便宜。我知道笔记本电脑的硬盘驱动器和IO子系统比台式机慢。
Tony_Henrich

1
请不要将页面文件放在RAMdisk上。这只会使系统发生更多页面错误。是的,如果将它们放在RAM上的页面文件上,将比在真实磁盘上更快地解决它们,但是根本不让它们解决仍然快得多。同样,许多增加的页面错误将与映射文件有关,而RAMdisk根本无法解决这些问题。
Jamie Hanrahan 2014年

Answers:


33

首先,不要将页面文件放在SSD上。尽管SSD在损耗平衡方面已经变得更好,但是页面文件却被频繁写入,这会使您的SSD降级的速度比一般用途快得多。

很多人不了解的是,windows从来没有真正拥有可用内存。有几个MB可用于突发需求,但除此之外,活动的使用中应用程序内存和总内存之间的差异通常由所谓的“备用”内存消耗。

系统记忆体

这些是可以在需要时转储的内存页(备用内存是一个很大的缓存),因此从应用程序的角度来看,它是可用的,但是决不使用它们。通常,它们充当磁盘缓存或页面文件缓存。

Windows的目标是根据使用模式,保留最有可能在此备用缓存中使用的数据。要使用人为的示例,让我们比较一下将Windows桌面内容缓存在备用内存中时,Windows Update之类的程序(通常配置为每周运行一次)的私有内存的相对值:

在大多数情况下,Windows Update正在休眠。它占用了内存,并且在等待调度程序执行的大部分时间里,它绝对没有任何价值。另一方面,可能会不断查询桌面文件夹的内容,特别是如果您想将文件保存到其中。

在这种情况下,Windows要做的是调出分配给Windows Update的内存(即使内存不“满”,并使用RAM中提供的空间来缓存桌面内容)。您。

Windows正在做出数以千计的这些决定,并管理后台服务不断写入的数百个文件的磁盘缓存,同时努力平衡活动应用程序的内存需求。有时它会暂时出错,并且当我们切换到在后台睡眠了一段时间的应用程序时,我们可能必须等待它将数据分页回内存。但是您要考虑的是,如果它已将该应用程序完全保留在内存中,又有多少其他应用程序又陷入困境,以等待磁盘读写完成,或者被迫分页?如果您当时正在使用这些应用程序怎么办?


应用程序经常分配很少使用的内存页,例如启动代码(使用一次,然后不需要),关闭代码(使用一次,然后不需要)或更新代码。当有更重要的用途时,将所有这些都保留在内存中是不切实际的,因此,一旦Windows识别了应用程序当前操作不需要的代码部分,即使将这些部分愉快地分页到页面文件中,即使从技术上讲可以将它们保留在内存中。

(实际上,根据应用程序的不同,系统可能会经常分配超出其实际容量的内存,并期望其中的大部分最终会分页出去。如果您要查看详细的内存故障,则需支付“ Commit”或“ Commit”费用是Windows分配给各种应用程序的内存量。页面文件用于提供对此内存的保证,即使它没有足够的物理RAM来覆盖它也是如此。)


我只是注意到您在您的问题中确实将可用内存和可用内存区分开来;如果您感到受过教and并且已经知道区别,我深表歉意。理想情况下,可用内存始终为0。但是,虽然备用内存是可以释放的内存,但并非总是可以迅速释放的内存。如果我尝试将1GB的文件写入磁盘,则Windows会尽可能将其粘贴到内存中的磁盘缓存中,然后在后台将其缓慢写入硬盘。如果应用程序需要请求50MB的额外内存,但由于仍在清除此巨大的磁盘缓存而没有可用空间,则该应用程序将挂起,直到可用为止。保留一个较小的缓冲区可使系统从用户的角度出发以最小的延迟解决此问题。


6
@FrankComputer请参阅我为8GB工作系统发布的屏幕快照:正在使用6300MB,备用磁盘/缓存1700MB,免费42MB。看看我的家庭系统(32GB内存),您实际上是正确的,但门槛不对:正在使用9.2GB,14.5GB磁盘缓存,8.6GB可用空间。如果Windows仅用尽了要缓存的内容,那么您将拥有可用内存,但是该阈值很高。Windows不会经常交换,因为磁盘缓存不是交换空间-当请求文件而不是在缓存中时,它是被动缓存的。您不会注意到它从缓存中拉出的时间,并且没有HDD活动。
达斯Android

8
@FrankComputer:如果您的系统运行良好,则不是因为有可用内存。可用内存是系统使用的内存,它对性能的影响不会超过桌面上的内存。使用内存提高性能的唯一方法是使用它,因此,如果它是免费的,则不会用于提高性能。释放更多的内存意味着使用更少的内存,从而使性能变差。
David Schwartz

1
@Tony_Henrich禁用页面文件是不好的。很坏。(将页面文件移动到ramdisk实际上与禁用它相同。Windows无法移动不需要立即将其移出内存的数据)。许多程序请求的内存并不立即需要,但将来可能需要。通常,Windows在页面文件上分配此内存,但它不执行任何操作。例如。MSSQL服务器在启动时会分配8GB的内存。即使对于0个数据库。只是因为。如果将页面文件放在ramdisk上,则会浪费大量的RAM,否则这些RAM可能会用于缓存
Darth Android

1
@Tony_Henrich当前,根据您使用系统的方式,Windows可以最佳地管理页面文件和RAM。您可以对其进行的唯一改进是:添加更多内存,或将操作系统移至SSD。处理您的页面文件可能会最大程度地降低整体系统性能,或者最糟糕的是会影响系统稳定性。
达斯Android

1
您正在解释Windows对内存的处理方式。如果我有很多可用内存,则Windows应该使用它,而不管应用程序正在休眠还是什么都不做。当有可用内存时将其保留在内存中有什么害处?一旦内存不足,则Windows可以使用该页面文件。使用页面文件会导致驱动器磨损。使用内存没有磨损。其次,我将SSD用于页面文件。尽管SSD的寿命比硬盘驱动器小,但随着时间的流逝,大量的写入工作变得很耗时,但这还不到几个月。还好几年了。
Tony_Henrich 2012年

4

这就是所谓的提前计划。

在仍有大量RAM的情况下将内存页面写入页面文件是一件好事。一旦程序请求的内存大于可用内存,操作系统便可以尽快开始清理空间。现在最好准备,以后再做。

如果操作系统要等待,那么您将遇到性能瓶颈。如果程序要求的内存超过可用内存,现在您必须等到操作系统写出更改的内存块,然后释放它们。


对于16G +和轻量级程序,程序要求的内存多于可用内存的时间要比频繁使用页面文件少。因此,在这种情况下,最好使用一些可用内存,而少使用页面文件。没有一种适合所有情况的解决方案。
Tony_Henrich,2012年

1
我想你不明白。不必是一个或另一个。Windows可以写入可用内存写入页面文件。这不像写入页面文件写入内存。
surfasb 2012年

1
但是,通过尝试提前计划,Windows是否可能无法填充HDD / SDD的片上缓存,从而使并发文件写入/加载操作变慢?这种预交换RAM听起来确实是个好主意,但似乎在偶然的情况下偶然会给系统增加负载。
2015年

1
@binki:是的,它确实会干扰磁盘的读/写时间,但是如果我记得,它们使用的优先级较低,因此通常应优先考虑其他读写操作。
Mooing Duck


2

最近7年,我关闭了页面文件。实际上,这是全新安装后我要做的第一件事。从来没有任何问题。(实际上,我有一个-名为“ titan quest”的游戏在启动时执行了非常愚蠢的检查,因此我创建了一个4 MB的页面文件只是为了让它开心,并在以后关闭了PF)。至于原来的问题。Windows使用我们的RAM进行磁盘I / O缓存。由于某种原因,它认为磁盘缓存对于活动程序代码和数据同样重要。而且没有办法限制磁盘缓存的大小。它是有意设计的,我们对此无能为力...哦,等等!我们可以!只需关闭页面文件。运行占用大量RAM的应用程序?购买更多RAM或关闭一个应用程序,然后再启动另一个。您可以使用Process Explorer查看任何给定时刻使用了多少内存。


1
摆脱页面文件不会关闭磁盘缓存。
杰米·汉拉汉

1
您写道:“ [磁盘缓存]是根据设计而存在的,我们对此无能为力。哦,等等!我们可以!只需关闭页面文件即可。” 好吧,关闭页面文件对磁盘缓存没有任何作用,那么您在说什么呢?无论如何,这是一个愚蠢的主意,因为它一旦被触摸,就会迫使操作系统将所有私有提交永久保留在RAM中。这样就减少了映射虚拟内存(如代码)的空间,因此必须对页面进行更多分页。主动式磁盘缓存(superfetch)使用了以上所有内容后剩下的内容,因此不会增加任何两者的分页。
杰米·汉拉罕

1
我从没说过(或以为)关闭页面文件是您的主意,所以我没有说“您的主意”。哦,虽然我在这里:“由于某些原因,[Windows]认为磁盘缓存对于活动程序的代码和数据同样重要”。这完全是错误的。Superfetch仅使用待机列表中的页面,因此已经是“可用”内存;它并不需要从项目网页的代码和数据,这些页面。保持代码和数据,即使他们包含来自文件的缓存数据可用,即立即可用的程序。
杰米·汉拉汉

1
我什么也没说。(您从哪里得到的?)但是,我说的是Windows永远不会分页任何东西来为磁盘缓存腾出空间。相反,缓存使用的页面当前不是进程的一部分,因此将被浪费。这样的RAM遗体立即可用的代码和数据需要它用于呼叫的东西,所以它不是“用完”的高速缓存,仅仅是“借来的”。因此,缓存不会减少可分页到RAM或保留在RAM中的代码和数据量。参考:Solomon,Russinovich和Ionescu的Windows Internals
杰米·汉拉汉

1
我已经回答了DA的答案。但是你刚才所说的不是他所说的。他说Windows将分出长时间不活动的进程(true)。他还说,磁盘缓存可能使用由此释放的页面(也是这样)。但这并不意味着磁盘缓存必须优先。如果没有其他更高优先级的页面需要,则磁盘缓存仅使用这些页面。大量测试证明这是一个很好的权衡。
杰米·汉拉汉

1

即使有足够的RAM,用于保留和使用页面文件的参数(此处此处)是:

  • 即使现在有可用内存,机器稍后也可能用尽内存。最好事先将很少使用的内存部分丢到磁盘上。
  • 还有一个“备用”内存显示为空闲,但实际上用于磁盘缓存。对于性能也很重要,最好拥有一些性能。
  • 如果在禁用页面文件的情况下用完了RAM,那就是硬崩溃。
  • 虽然2、4、16或任何其他数量的Gb RAM看起来像“很多”,但这可能不像您所相信的那样正确。您需要配置文件。

使用Windows资源监视器,可以查看有多少RAM用于缓存(显示为“待机”)。

如果看到RAM已实际使用或处于待机状态,则页面文件对您很有用。如果您的任务和可用RAM的组合使得大部分内存显示为未使用(“空闲”),那么我认为没有必要仅仅出于对“知道得更好并且在这里说过”的人的考虑而对硬盘进行磨削。 ”。


-2

所有这些评论和正确的答案都丢失了。关闭您的页面文件。8GB RAM不需要它,如果需要更多RAM,请购买。真的很简单。


4
Windows非常聪明地确定要在页面文件中放入什么(不是)。除了一些几乎纯理论上的情况以外,即使具有8 GB的RAM,将其关闭也会损害性能。即使缺少正确答案,也肯定不是。
马克·托马斯

4
是否有任何证据支持您的“危害表现”主张?我提出了一篇MS文章support.microsoft.com/kb/889654
a2552308

6
简而言之:页面文件只能增加磁盘活动...而Windows不够聪明,如果有大量RAM则根本不使用它。在SSD系统上,这可能不太明显,而在主轴系统上,这可能会对应用程序性能产生很大影响。请参阅原始海报。
a2552308

2
MS文章的相关部分:“但是,随着向计算机添加更多RAM,对页面文件的需求减少了。如果计算机中安装了足够的RAM,则除非需要一个页面文件,否则可能根本不需要页面文件。通过特定的应用程序。” 在您链接的许多文章中我找不到相关的部分,也许您可​​以引用相关的部分?
a2552308

2
从理论上讲听起来不错,但是我在实践中观察不到。
a2552308
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.