虚拟内存设置为“系统管理的大小”,但所在磁盘有足够空间的情况下,虚拟内存(页面文件)却不会自动调整增加

匿名
2014-09-25T10:53:28+00:00

我的操作系统是Vista,虚拟内存放在系统盘C盘,设置为“系统管理的大小”,但在C盘有足够空间的情况下,虚拟内存(页面文件)却不会自动调整增加,请问这是怎么回事呢?之前一直都是可以正常自动调整增加的。

Windows帮助里有说明:系统自动管理的时候,Windows将页面文件的初始最小值设为计算机RAM物理内存+300MB,最大值为物理内存的3倍。我是3G物理内存,虚拟内存一直都设置为“系统管理的大小”,以前正常的情况下,重启后初始大小自动设置分配为3315M,符合Windows帮助里的说明,随着系统运行,如果有需要虚拟内存会自动增加,甚至都能一直增加到耗尽C盘空间。我在C盘专门预留了足够大的空间,除了还原点和初始页面文件占据的空间,都还有三四个G的剩余空间,所以页面文件(不含物理内存)一般能从初始值3315M增加到六七个G。几年了本来一直都是这样正常运行的。

不知前几天出现了什么问题,好像是打开很多网页和程序,某个网页视频程序不断下载东西耗尽C盘空间,重启之后就有两个不正常的地方了:

1、重启后页面文件的初始大小偏离3315M的正常值,一般都比这个值偏小,甚至有时只分配几百M;

2、运行大量程序需要自动增加虚拟内存的时候,页面文件却保持在初始值不再增加,或者只增加少量几百M就不再变化了,再打开程序就出现内存不足的黄色警告提示。而且奇怪的是,通过设置自定义大小却可以增加虚拟内存,就是设置为系统管理大小时不能自动调整。

这两种现象都是出现在C盘剩余空间足够(至少都剩余3个G以上)的情况下,经过多次重启运行试验,上述两个问题都存在,有时偶尔重启一次是正常的,之后又会出现问题。

不知道系统自动管理虚拟内存的具体机制和策略是什么,除了Windows帮助里的简单说明,是否还依赖与某些相关的配置文件或者统计数据,不知道是否是这些文件数据丢失或异常造成的问题。希望能得到准确专业的解答,非常感谢!

Windows 家庭版 | 以前的 Windows 版本 | 性能和系统故障

锁定的问题。 此问题已从 Microsoft 支持社区迁移。 你可投票决定它是否有用,但不能添加评论或回复,也不能关注问题。

0 个注释 无注释

4 个答案

排序依据: 非常有帮助
  1. 匿名
    2014-09-27T08:26:02+00:00

    我关闭虚拟内存(设置为无分页文件),删除pagefile.sys文件后,再重新设置虚拟内存,好像问题得到解决。

    而且经常多次测试和搜集数据分析,我发现Windows管理控制分页文件大小的策略(或者说算法)是这样的:

    开机后系统设置 (如果分页文件设置放在C盘):

    分页文件初始大小 = min(自定义初始值或者系统管理时的默认初值,开机时C盘可用空间)

                 最大值    = min(自定义最大值或者系统管理时的默认最大值,开机时C盘可用空间)

    其中,min(A,B)指A,B中的较小值。

    按Windows帮助里的说明,系统管理时的默认初值 = 计算机物理内存+300MB,默认最大值 = 物理内存的3倍。

    问题就出在“开机时C盘可用空间”的判断上。因为一般分页文件pagefile.sys不会自动清除(除非在安全策略里设置),开机时这个文件还存在,而且保持着上一次关机时的大小。正常的时候,开机重新设置分页文件的“可用空间”应该是C盘剩余空间加上这个上次关机保留着的分页文件本身占据的空间。但不知什么原因,系统将“可用空间”错误地认定为只是C盘剩余空间,而不计入C盘保留着的分页文件占据的空间,从而出现了我这个帖子说的问题。

    比如,如果物理内存是3G,分页文件设置为“系统管理的大小”时默认初始大小是3.3G,最大值是9G。

          假设开机时(也就是上一次关机时的状态)C盘剩余空间2G,上一次关机时C盘上还保留着一个4G大小的分页文件,此时设置分页文件的可用空间正常情况下应该是2G+4G=6G。按上面的算法,系统会将分页文件的初始值设置为3.3G,最大值设置为可用空间6G(而非9G)。

          但如果发生异常,系统将分页文件的可用空间判定为只是C盘剩余空间的2G,因为可用空间比系统管理的默认初始最小值还小,按照算法,分页文件的实际初值和最大值都会被设置为同一个值:可用空间2G,所以就出现初始分配值偏小,而且不能增加的现象。

          不但是系统管理,自定义大小的时候如果设置数值不恰当,同样会出现上述情况。

          而且奇怪的是,在这种异常情况下,开机后再重新手动设置一下分页文件大小,系统又会正确判断可用空间,分配正确的最小值和最大值。

    现在唯一不清楚的是,这个可用空间计算错误的低级bug是怎么产生的。关闭并重置虚拟内存倒是可以纠正这个bug。

    7 个人认为此答案很有帮助。
    0 个注释 无注释
  2. 匿名
    2014-09-26T08:12:43+00:00

    您好,

    关于您问到的一些问题,建议您到MSDN论坛提问,获得更加专业的回答。

    http://social.msdn.microsoft.com/Forums/zh-CN/home

    0 个注释 无注释
  3. 匿名
    2014-09-26T05:35:57+00:00

    谢谢您的回答。

    我在问题中说了,我试过了手动设置,改为自定义大小,虚拟内存能够在自定义的最小和最大值之间自动调整增加,但就是设置为“系统管理的大小”就不行。

    虽然我今后也可以改为手动自定义设置,但我之前几年一直用“系统管理的大小”都能正常调整,我就是想弄清楚产生异常的原因。我自己的体会是系统管理似乎是要依赖一些用户使用磁盘的统计数据,比如之前我过度耗尽了C盘,感觉系统根据这个情况自动将虚拟内存大小的默认上下限给修改了,如果是这样的话,我想知道这些统计数据或者配置文件具体是什么,在那个地方,能否修改。

    谢谢您提供的论坛资料,我大概看了一下,那好像是操作系统内存管理的底层理论技术细节。我现在这个问题想知道的是虚拟内存大小设置控制的用户使用级别的上层策略,像前面说的统计数据配置文件之类的,好像不是一个层次的东西。。。

    另外顺便问一个系统还原的问题,当时出了问题我本来想还原到上一个还原点的,但还原失败,而且这个系统还原以前就经常失败,难得有成功的时候。查了一下网上有的人说可能是应用软件的干扰,在安全模式或者恢复环境WinRE中进行系统还原能提高成功率,也想在这里问一下这个说法对吗?谢谢。

    0 个注释 无注释
  4. 匿名
    2014-09-26T02:09:23+00:00

    您好,

    根据您的描述,建议您尝试一下手动设置虚拟内存。

    具体操作:在“计算机”上右键选择“属性”—“高级系统设置”—“性能”选项下的“设置”—“高级”—“虚拟内存”下的“更改”,取消勾选“自动管理”,勾选自定义大小后进行配置即可。

    如果您希望了解有关系统自动管理虚拟内存的具体机制和策略,请参考如下开发者论坛。

    http://msdn.microsoft.com/en-us/library/windows/desktop/aa366916(v=vs.85).aspx

    希望对您有帮助

    0 个注释 无注释