2、页面文件碎片
首先对Windows下的页面文件进行必要的了解,页面文件是指操作系统用来构建虚拟内存的硬盘空间。具体来说,在windows NT操作系统下(Windows 2000/XP)用于实现虚拟内存的文件则以系统分区根目录下的页面文件 pagefile.sys(具有隐藏、系统属性)形式来保存。这些文件的大小——即pagefile.sys文件大小的默认值是物理内存的1.5倍。同时,页面文件可以设置一个比平常值大的最大值。
“由于虚拟内存使用了硬盘,硬盘上非连续写入的文件会产生磁盘碎片,因此一旦用于实现虚拟内存的文件或分区过于零碎,会加长硬盘的寻道时间,影响系统性能。有观点误认为Windows系统频繁读写pagefile.sys就会产生磁盘碎片,实则不然。因为pagefile.sys文件一旦创立,在分区中的分布连续形式就固定下来,文件内部读写并不增加或减少pagefile.sys的文件大小。仅当页面文件告罄后系统创建的temppf.sys会带来磁盘碎片(内容摘自:虚拟内存- 维基百科,自由的百科全书)”。需要向用户解释一下temppf.sys文件,就是当物理内存空间与页面文件皆不够用时,系统会自动生成temppf.sys(temporary pagefile,临时页面文件)进行补足,temppf.sys的大小在页面文件的大小和最大值之间。
在Linux操作系统支持两种形式的交换空间:交换分区和交换文件。 交换分区:在磁盘中专门分出一个磁盘分区用于交换。交换文件:创建一个文件用于交换 交换空间大小没有规定特定的值,如果物理内存较小(小于512M字节)时,一般设置为物理内存的1.5倍到2倍。
从实质方面讲,一些大型应用程序由于对内存空间的占用量比较大,单独开辟一部分硬盘空间作为读取数据缓冲,这部分硬盘空间的实体就是应用程序创建的页面文件,“页面文件被用于存储那些已经被修改过的,虽然仍在被使用但又不得不写到磁盘的页面(内容摘自《深入解析Windows操作系统》「第4版」)”。比如Photoshop。这种设计可以缓解系统调度内存的压力,并提高软件运行速度。
首先了解虚拟内存碎片是如何产生的?
对虚拟内存有所了解的用户都明白虚拟内存的分配和管理都是由Windows的内存管理器来完成的,也就是说“虚拟存储系统的本质是开发一种动态加载的有效技术——在运行时刻将虚拟地址捆绑到物理地址”,其是一个动态变化的过程,及内存的分配和使用都是动态的。
同时由于Windows虚拟内存占用了硬盘空间,硬盘上非连续写入的文件会产生磁盘碎片,因此一旦用于实现虚拟内存的文件或分区过于零碎,会加长硬盘的寻道时间,进而影响应用程序的运行性能,降低计算机响应速度。
优化虚拟内存
一、减少虚拟内存产生碎片问题可采取升级内存的方式。
二、另外微软已经给用户提供了官方的解决方案。同时借鉴与Linux操作系统中交换分区的设置,将用于虚拟内存的部分置于单独的分区中,不影响其他的分区或文件,则基本杜绝了磁盘碎片带来的影响。
单独建立一个空白分区,在该分区设置虚拟内存,其最小值设置为物理内存的1.5倍,最大值设置为物理内存的3倍,该分区专门用来存储页面文件,不要再存放其它任何文件。之所以单独划分一个分区用来设置虚拟内存,主要是基于两点考虑:其一,由于该分区上没有其它文件,这样分区不会产生磁盘碎片,这样能保证页面文件的数据读写不受磁盘碎片的干扰;其二,按照Windows对内存的管理技术,Windows会优先使用不经常访问的分区上的页面文件,这样也减少了读取系统盘里的页面文件的机会,减轻了系统盘的压力。
前提在同一块物理磁盘上,建议不要将虚拟内存设置到除C盘(C盘作为系统分区时)之外的其他分区。用户应该以访问速度从高到底的顺序来进行选择。由于C盘位于磁盘为外围,线速度最大,读取数据速度最快,建议在C盘中建立单独的空白分区专供虚拟内存空间占用。
三、如果已经在一个分区上设置了页面文件,则不要在其它硬盘分区上不设置任何页面文件。“在同一物理磁盘上的多个交换分区就不应该被并行地使用,而应该以访问速度从高到底的顺序使用。所以在只有一块物理磁盘的时候,设置多个交换分区,并不能提高性能,反而可能会使性能下降。(内容摘自:虚拟内存- 维基百科,自由的百科全书)”。
当然,若计算机上存在多块硬盘硬盘的话,则可以为块硬盘上都创建一个页面文件。当信息分布在多个页面文件上时,硬盘控制器可以同时在多个硬盘上执行读取和写入操作,从而系统性能将得到明显的提高。
四、将页面文件的“初始大小”和“最大值”设置为相同值不仅可以提升计算机运行性能,并且在很大程度上增加了磁盘的碎片程度。将二者设置为相同的值后“操作系统的处理过程中无需再扩展页面文件”(内容摘自《Windows XP Professional使用与开发详解》)。
如何整理虚拟内存碎片
“一旦页面文件被打开了,在系统运行过程中它就不能被删除,因为System进程针对每个页面文件维护了一个打开的句柄。页面文件总是打开的,这一事实也说明了为什么内置的碎片整理工具无法在系统运行的时候整理文件碎片了”(内容摘自深入解析Windows操作系统》「第4版」)。
要整理页面文件,首先将页面文件从原先所在的驱动器移动到其他驱动器,然后对原来驱动器进行整理,最后再将页面文件移回到原驱动器上,此时页面文件就会存放在连续的磁盘空间中了。
另外也可需要来自微软官方专业的免费虚拟内存整理工具Pagedefrag。相比上述方法,通过软件自动整理页面碎片要快捷得多。
PageDefrag采用先进的碎片整理技术,“它使用了其他的第三方碎片整理工具相同的方法 ——它在引导过程中的早期,在会话管理器打开页面文件之前运行了碎片整理过程(内容摘自深入解析Windows操作系统》「第4版」)”。
此外,它重新整理事件日志文件和Windows 2000/XP休眠文件。
虚拟内存整理工具Pagedefrag应用非常简单。具体操作如下:
Pagedefrag可在http://technet.microsoft.com/en-us/sysinternals/bb897426微软官网进行下载,安装包为70KB。
完成下载后,双击PageDefrag压缩包,只提取pagedfrg.exe从zip文件的应用程序,即可打开PageDefrag主界面。笔者考虑到页面文件碎片可能程序影响磁盘性能的主要因素,所以建议用户选择“Delragment every boot(每次启动时执行碎片整理)”单选框。在这里需要提醒用户的是PageDefrag运行前,确保页面文件的位置在C盘(系统盘),否则在安装PageDefrag后在将页面文件的位置在进行调整时,在引导过程中会出现不必要的麻烦。在安装点击“OK”按钮并重新启动Windows。
当Windows启动时加载,PageDefrag会自动运行,并完成文件碎片整理工作,完成后加载完整Windows。
在此过程中,PageDefrag处理每个页面文件并在引导时将文件名及其碎片整理结果显示在屏幕上。
提醒用户的是,(在某些情况下,PageDefrag可能在无法一个或多个文件中减少碎片时,会在启动时显示为蓝屏In some cases PageDefrag may be unable to reduce fragmentation on one or more of the files, and it will indicate so on the boot-time Blue Screen.)。这主要是由于页面文件所在分区剩余空间过小导致的,或由于磁盘存在的碎片过多导致的。为获得最佳效果,微软官方建议用户PageDefrag程序与专门磁盘碎片整理工具相结合使用。
经过检测,用PageDefrag工具整理页面碎片之后,可以发现Windows的运行速度要比以前快上很多,Windows并且也比以前更趋于稳定。
提醒用户是,来自互联网的一些计算机的应用操作技巧认为,出于降低C盘碎片的目的,建议将虚拟内存设置为其他分区中,如果前提在一个物理硬盘内的不同分区。上述完全是伪技巧,因为C盘做为默认的系统盘,硬盘读写最频繁的就是系统文件和页面文件。而硬盘读写时最耗时的操作是什么呢?是磁头定位!而同一分区内的磁头定位无疑要比跨分区的远距离来回定位要节省时间!所以,系统盘内的虚拟内存(系统默认值)是执行最快、效率最高的。
如何有效防止虚拟内存碎片
建议将“初始值”大小设置足够大,推荐分页文件的最小容量,也就是初始值为物理内存的1.5倍,将初始值的两倍作为最大容量。否则,如果初始值过小,Windows可能扩大分页文件,以补偿额外的分页活动。动态扩展分页将导致碎片化。分页文件将分散在整个磁盘中,破坏了Windows在启动时连续空间中的创建,不可避免地增加了Windows得开销,导致计算机运行性能降低。
3、内存碎片方面
经过对磁盘碎片的阐述,有人会问我,内存方面是否存在“碎片”。当然有。“系统初启后,内存中出操作系统区之外,其余空间为一个大的空闲区,当有程序要求装入内存运行时,系统从该空闲区中划分一块与程序大小相同的区域进行分配,当系统运行一段时间后,随着一系列内存分配和回收,原来的一整块大空闲形成若干占用和空闲区相同的布局(内容摘自《操作系统教程》 陈向群等编)”。上述所涉及到的空闲块被称为碎片。内存上存在的“碎片”看似是在布局分配不够均匀,是由于“随着这些进程经历了工作集的修剪和增长,它们的‘从虚拟内存到物理内存的映射’将会变得非常碎(内容摘自《深入解析Windows操作系统》「第4版」)“。但这种分布不够均匀必要时也需要所谓的“偶尔的”整理工作,如频繁地进行的整理内存碎片整理的话会直接导致内存与磁盘互相传递数据过于频繁,进而降低计算机的运行性能,在下文中会有更为详细地讲述。
“经过一段时间的分配回收后,内存中存在很小的空闲块,它们每一个都很小,不足以满足分配内存的要求,但其总和却和却可以满足程序的分配要求(内容摘自《操作系统教程》 陈向群等编)”。所以系统在“必要时”需要连续的内存空间供更多程序使用,更好的保证程序的持续运行。SweepRAM内存管理工具在使系统中的进程得到连续可用内存空间方面做的相当出色。它最大的作用是把所有进程的工作集清空,从而计算机获得更多可用连续内存空间。 “有了连续可用的内存,在一种情形下可以导致性能的提高:为了尽可能地使CPU内存高速缓存的行为最为理想,内存管理器使用一种称为页面着色(page coloring)的机制,以确定将空闲列表或零化列表中的哪个页面分配给一个进程(内容摘自《深入解析Windows操作系统》「第4版」)”。
“所谓工作集是指进程已映射的物理内存部分(即这些内存块全在物理内存中,并且 CPU 可以直接访问),还有一部分不在工作集中的虚拟内存则可能在转换列表中(CPU 不能通过虚地址访问,需要 Windows 映射之后才能访问),还有一部分则在磁盘上的页面文件里。工作集在进程运行时会被 Windows 自动调整,频繁访问的页面(4KB 的块)会留在内存中,而不频繁访问的页面在内存紧张时会被从工作集中移出,暂时保存在内存中的“转换列表”中,或者进一步换出到页面文件中。当应用程序再次访问某一页面时,操作系统会将它重新加回工作集中(内容摘自:虚拟内存-百度百科)“。
另外一种情形,SweepRAM扩大可用内存空间时,它是在迫使其他进程的数据及代码换出物理内存,部分以页面文件的形式写入到磁盘。“RAM优化器的工作原理是,先申请大量的虚拟内存,然后释放这部分内存空间(内容摘自《深入解析Windows操作系统》「第4版」)。”
列举一个简单的例子,如果用户在运行Firefox浏览器,那么,所打开的标签页、扩展、模板及其高级设置为Firefox的工作集的一部分,在运行SweepRAM内存优化前这些数据驻留在物理内存上,而优化之后如用户再想切换到之前打开标签页时,这些网页数据需要从磁盘上读取出来,出现了读取延迟现象。这样直接会导致磁盘读写工作增加及磁盘碎片增多的可能。在运行SweepRAM也考虑到上述问题,将其写入到Windows系统的“任务计划”中,采取了一种比较适中的频率(大约 35至40 分钟一次)来自动反复运行,可以将各进程的工作集清空,而之后各进程的工作集会慢慢恢复。这样可以保持更好的工作集平衡,从而提高系统运行性能。不可否认微软在优化内存管理上的贡献,“在通常情况下,Windows XP用自动启用‘内存页面调度’功能,将内存中的片段写入硬盘,这样做的好处是可以随时清空内存中的碎片有利于应用程序的运行(内容摘自《电脑系统 软件 硬件优化精解》)”,具体开启步骤如下,进入HKEY_LOCAL_MACHIN\ESYSTEM\CurrentControlSet\Control\Session Manager\Memory Management分支,将右侧窗口下的“DisablePagingExecutive”的DWORD值设置为“0”即可。“常识告诉我们,如果RAM优化器是可能的(并且能够有这么多如此小巧的新贵程序来实现),那么Microsoft的开发人员早就将这些技术集成到内核了(内容摘自《深入解析Windows操作系统》「第4版」)”。
SweepRAM适用于 Windows 2000/XP/2003操作平台,可在http://dl.pconline.com.cn/download/53051.html进行下载。将下载SweepRAM安装包进行解压缩,提取vb6fr.dll复制到C:\WINDOWS\system32(C:\为系统盘),SweepRAM运行时要调用该动态链接文件,然后双击SweepRAM主执行文件即可完成安装。
还有对于低配置内存的用户来说,更多用户可能会寄托于第三方内存优化程序。想法可以理解,但是不要过分倾向于第三方内存管理工具,因为“内存管理器已经处理了所有必要的内存优化(内容摘自《深入解析Windows操作系统》「第4版」)”,所以通过升级内存空间的方式来提升计算机运行性能才是最根本的解决措施。“总之,常识告诉我们,如果RAM优化器是可能的(并且能够由这么如此小巧的新贵程序来实现),那么Microsoft的开发人员早就将这些技术集成到内核中了(内容摘自《深入解析Windows操作系统》「第4版」)”。所以如何从根本实现更加有效地“运作”及管理内存,其实现措施是将操作系统更新到最新版本。