虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),
而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
简介
别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存[1]技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用虚拟存储器进行补偿。它将计算机的RAM和硬盘上的临时空间组合。当RAM运行速率缓慢时,它便将数据从RAM移动到称为“分页文件”的空间中。将数据移入分页文件可释放RAM,以便完成工作。 一般而言,计算机的RAM容量越大,程序运行得越快。若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试通过增加虚拟内存来进行补偿。但是,计算机从RAM读取数据的速率要比从硬盘读取数据的速率快,因而扩增RAM容量(可加内存条)是最佳选择。
虚拟内存不足的成因
【1】、感染病毒:有些病毒发作时会占用大量内存空间,导致系统出现内存不足问题。
【2】、虚拟内存设置不当:通常,应设置为物理内存大小的2倍。若设置过小,则会影响系统程序的正常运行。此时便需重设虚拟内存数值,以“Windows XP”为例,右击“我的电脑”,选择“属性”,在“高级”标签页点击“性能”框中的“设置”按钮,切换至“高级”标签页,后在“虚拟内存”框中点击“更改”按钮,接着重设虚拟内存数值,再点“设置”并“确定”,完后重启系统即可。
【3】、系统盘空间不足:在默认情况下,虚拟内存是以名为“Pagefile.sys”的交换文件存于硬盘的系统分区中。若系统盘剩余容量过小,即会出现该问题。系统盘至少应留有300MB的可用空间,当然此数值需据用户的实际需要而定。尽量不要将各种应用软件装在系统盘,以保证有足够的空间供虚拟内存文件使用,且最好将虚拟内存文件安放至非系统盘内。
【4】、System用户权限设置不当:基于NT内核的Windows系统启动时,System用户会为系统创建虚拟内存文件。有些用户为了系统的安全,采用NTFS文件系统,但却取消了System用户在系统盘“写入”和“修改”的权限,这样就无法为系统创建虚拟内存文件,运行大型程序时,也会出现此类问题。对策:重新赋予System用户“写入”和“修改”的权限即可。(注:该仅限于使用NTFS文件系统的用户。)
合理设置虚拟内存
一、如何确定虚拟内存大小?
1、新手篇
由系统或系统优化软件分配或设置为物理内存的1.5-3倍。
2、老手篇
事实上,严格按照1.5-3倍的倍数关系来设置并不科学,因此我们可以根据系统的实际应用情况进行设置。在这过程中需要用到Windows 2000/XP Pro/2003自带的性能监视器。
1.运行“perfmon.msc”打开性能监视器,展开左侧的性能日志和警报,并点击选择计数器日志,在右侧的面板中空白处点击鼠标右键,选择新建日志设置,并命名为Pagefile,然后回车确认。
2.在常规选项卡下,点击添加计数器按钮,在新弹出的窗口的性能对象下拉菜单中选择Paging File,并选择“从列表选择计数器”,然后点击% Usage Peak,在范例中选择“_Total”,并接着点击“添加”按钮。
3.然后关闭这个窗口,并点击图三中的“确定”按钮。点击“是”创建日志文件。接着打开“日志文件”选项卡,在日志文件类型下拉菜单中选则“文本文件(逗号分隔)”,然后记住“例如”框中显示的日志文件的路径。
4.这样,点击确定后这个计数器已经开始运行了,你可以在电脑上进行你的日常操作,并尽可能多的打开和关闭各种经常使用的应用程序和游戏。经过几个小时的使用,基本上计数器已经可以对你的使用情况做出一个完整的评估。
5.这时你需要先停止这个记数器的运行,同样是在计数器日志窗口中,选中我们新建的Page File记数器,然后右键点击,并且选择停止。用记事本打开日志文件。
6.需要注意的是,在日志中的数值并不是分页文件的使用量,而是使用率。也就是说,根据日志文件的显示,该系统一般情况下的分页文件只使用了25%左右,而系统当前设置的分页文件足有2GB,那么为了节省硬盘空间,完全可以把分页文件最大值缩小为512MB大小。而对于最小值,可以先根据日志中的占用率求出平均占用率,然后再与最大值相乘,就可以得到了。
二、虚拟内存的位置
在设置虚拟内存的时候还需要注意,如果你有超过一块硬盘,那么最好能把分页文件设置在没有安装操作系统或应用程序的硬盘上,或者所有硬盘中速率最快的硬盘上。这样在系统繁忙的时候才不会产生同一个硬盘既忙于读取应用程序的数据又同时进行分页操作的情况。相反,如果应用程序和分页文件在不同的硬盘上,这样才能最大程度降低硬盘利用率,同时提高效率。当然,如果你只有一个硬盘,就完全没必要将分页文件设置在其他分区了,同一个硬盘上不管设置在哪个分区中,对性能的影响都不是很大。
三、虚拟内存页面文件与磁盘碎片
由于虚拟内存使用了硬盘,硬盘上非连续写入的文件会产生磁盘碎片,因此一旦用于实现虚拟内存的文件或分区过于零碎,会加长硬盘的寻道时间,影响系统性能。有观点误认为Windows系统频繁读写pagefile.sys就会产生磁盘碎片,实则不然。因为pagefile.sys文件一旦创立,在分区中的分布连续形式就固定下来,文件内部读写并不增加或减少pagefile.sys的文件大小。仅当页面文件告罄后系统创建的temppf.sys会带来磁盘碎片。 而在Linux系统中,将用于虚拟内存的部分置于单独的分区中,不影响其他的分区或文件,则基本杜绝了磁盘碎片带来的影响。
虚拟内存太低的解决办法
一般windows XP默认情况下是利用C盘的剩余空间来做虚拟内存的,因此,C盘的剩余空间越大,对系统运行就越好,虚拟内存是随着你的使用而动态地变化的,这样C盘就容易产生磁盘碎片,影响系统运行速率,所以,最好将虚拟内存设置在其它分区,如D盘中。查看虚拟内存设置情况如下:
右键点“我的电脑”,左键点“属性”,点选“高级”选项卡,点“性能”里的“设置”按钮,再选“高级”选项卡,点下面的“更改”按钮,所弹出的窗口就是虚拟内存设置窗口,一般默认的虚拟内存是从小到大的一段取值范围,这就是虚拟内存变化大小的范围,最好给它一个固定值,这样就不容易产生磁盘碎片了,具体数值根据你的物理内存大小来定,一般为物理内存的1.5到3倍,如内存为256M,那么应该设置256*1.5=384M,或者干脆512M,设置方法如下:
假设内存为256M,虚拟内存放在D盘,先要将默认的清除,保持C盘为选中状态,单选“无分页文件(N)”再按“设置”按钮,此时C盘旁的虚拟内存就消失了,然后选中D盘,单选“自定义大小”,在下面的“初始大小”和“最大值”两个方框里都添上512,再点一下“设置”按钮,会看到D盘的旁边出现了“512-512”的字样,这样就说明设置好了,再一路确定,最终,系统会要重新启动,重启一下,便完成了设置。
四、设置方法
手动设置
找出最合适的虚拟内存大小范围值后,
①用右键点击桌面上的“我的电脑”图标,在出现的右键菜单中选“属性”选项打开“系统属性”窗口。在窗口中点击“高级”选项卡,出现高级设置的对话框
②点击“性能”区域的“设置”按钮,在出现的“性能选项”窗口中选择“高级”选项卡,打开其对话框。
③在该对话框中可看到关于虚拟内存的区域,点击“更改”按钮进入“虚拟内存”的设置窗口。选择一个有较大空闲容量的分区,勾选“自定义大小”前的复选框,将具体数值填入“初始大小”、“最大值”栏中,而后依次点击“设置→确定”按钮即可,最后重新启动计算机使虚拟内存设置生效。
调整分页位置
Windows9x的虚拟内存分页位置,其实就是保存在C盘根目录下的一个虚拟内存文件(也称为交换文件)Win386.swp,它的存放位置可以是任何一个分区,如果系统盘C容量有限,我们可以把Win386.swp调到别的分区中,方法是在记事本中打开System.ini(C:Windows下)文件,在[386Enh]小节中,将“PagingDrive=C:WindowsWin386.swp”,改为其他分区的路径,如将交换文件放在D:中,则改为“PagingDrive=D:Win386.swp”,如没有上述语句可以直接键入即可。
而对于使用Windows2000和WindowsXP的,可以选择“控制面板→系统→高级→性能”中的“设置→高级→更改”,打开虚拟内存设置窗口,在驱动器[卷标]中默认选择的是系统所在的分区,如果想更改到其他分区中,首先要把原先的分区设置为无分页文件,然后再选择其他分区。
或者,WinXP一般要求物理内存在256M以上。如果你喜欢玩大型3D游戏,而内存(包括显存)又不够大,系统会经常提示说虚拟内存不够,系统会自动调整(虚拟内存设置为系统管理)。
注意事项
允许设置的虚拟内存最小值为2MB,最大值不能超过当前硬盘的剩余空间值,同时也不能超过32位操作系统的内存寻址范围——4GB。
1、禁用页面文件
当拥有了1G以上的内存时,页面文件的作用将不再明显,因此我们可以将其禁用。方法是:依次进入注册表编辑器“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\MemoryManagement”下,在“DisablePagingExecutive”(禁用页面文件)选项中将其值设为“1”即可。
PS:此举可能会造成系统不稳定.某些程序无法运行或死机。请根据自己实际情况更改。
1G以上内存就比较够用了,玩游戏、使用大型软件不推荐禁用虚拟内存。当然如果内存有2G的时候,可以根据自己的实际情况选择虚拟内存的使用大小(我个人认为2G内存可以禁用虚拟内存以提升系统性能,VISTA系统内存使用比较大,可以根据实际情况设定)。
2、清空页面文件
在同一位置上有一个“ClearPageFileAtShutdown(关机时清除页面文件)”,将该值设为“1”。这里所说的“清除”页面文件并非是指从硬盘上完全删除pagefile.sys文件,而是对其进行“清洗”和整理,根据微软的说法,这是一个安全选项,与性能无关。
高级话题:使用 SweepRAM 工具。适用于 Windows 2000/XP/2003。网上可以找到 SweepRAM 程序。该程序最大的作用是把所有进程的工作集清空。所谓工作集是指进程已映射的物理内存部分(即这些内存块全在物理内存中,并且 CPU 可以直接访问),还有一部分不在工作集中的虚拟内存则可能在转换列表中(CPU 不能通过虚地址访问,需要 Windows 映射之后才能访问),还有一部分则在磁盘上的页面文件里。工作集在进程运行时会被 Windows 自动调整,频繁访问的页面(4KB 的块)会留在内存中,而不频繁访问的页面在内存紧张时会被从工作集中移出,暂时保存在内存中的“转换列表”中,或者进一步换出到页面文件中。当应用程序再次访问某一页面时,操作系统会将它重新加回工作集中。
SweepRAM 工具以一种适中的频率(大约 40 分钟一次)反复运行,可以将各进程的工作集清空,而之后各进程的工作集会慢慢恢复。这样可以保持更好的工作集平衡,从而提高系统性能。
使用技巧
对于虚拟内存如何设置的问题,微软已经给我们提供了官方的解决办法,对于一般情况下,我们推荐采用如下的设置方法:
(1)在Windows系统所在分区设置页面文件,文件的大小由你对系统的设置决定。具体设置方法如下:打开"我的电脑"的"属性"设置窗口,切换到"高级"选项卡,在"启动和故障恢复"窗口的"写入调试信息"栏,如果你采用的是试和错误报告了。所以折中的办法是在系统盘设置较小的页面文件,只要够用就行了。
(2)单独建立一个空白分区,在该分区设置虚拟内存,其最小值设置为物理内存的1.5倍,最大值设置为物理内存的3倍,该分区专门用来存储页面文件,不要再存放其它任何文件。之所以单独划分一个分区用来设置虚拟内存,主要是基于两点考虑:其一,由于该分区上没有其它文件,这样分区不会产生磁盘碎片,这样能保证页面文件的数据读写不受磁盘碎片的干扰;其二,按照Windows对内存的管理技术,Windows会优先使用不经常访问的分区上的页面文件,这样也减少了读取系统盘里的页面文件的机会,减轻了系统盘的压力。
(3)如果已经设置的一个分区的页面文件,则其它硬盘分区不设置任何页面文件。因为过多的分区设置页面文件,这样会导致,硬盘磁头反复的在不同的分区来回读取。这样既耽误了系统速率,也会减少硬盘的寿命。当然,如果你有多个硬盘,则可以为每个硬盘都创建一个页面文件。当信息分布在多个页面文件上时,硬盘控制器可以同时在多个硬盘上执行读取和写入操作。这样系统性能将得到提高。