yansy 发表于 2006-4-16 15:59

【原创】科学合理设置Windows的虚拟内存

此文原发在Windows中文站:
http://bbs.winos.cn/viewthread.php?tid=2116&extra=page%3D1

现在内存的价钱越来越便宜(我年前买的内存1k多1G,头几天朋友买的1G才550元,晕),很多新机标准已经装备了1GB(或更多)的内存,还有很多人也在给老电脑的内存升级。在升级了物理内存之后,如何有效设置虚拟内存才能获得最大限度的性能提升?网上流传的一些优化虚拟内存的方法真的有效吗?如何科学地设置虚拟内存?这些就是本文将要讨论的内容。

我们通常说的一台电脑的快慢,实际上包括四个子系统的性能:CPU,内存,网络和硬盘。这四个方面不能存在瓶颈,否则会严重影响性能的整体性能。不幸的是,在购买机器的时候人们往往注重于CPU的频率,忽略了其它三个组件。特别是某些品牌机,P4的CPU,往往才搭配256M甚至更少的内存,这样的配置,有人反应P4的机器比P3的还慢,就显得很正常了。

本文讨论内存,虚拟内存的配置对机器性能的影响,其它的几个子系统对机器性能的影响,在以后的文章中再讲述。

首先我们看看微软官方的建议。Windows建议把虚拟内存设置成让Windows自动管理。如果非要手工设置,对于虚拟内存,微软建议的设置是物理内存数量的1.5-2倍(分别为虚拟内存的最小值和最大值)。

这样的建议是否合理呢?我们通过一个例子来说明。
假设有两台PC,A机内存128M,B机的内存2G。
按照上面建议,A机的虚拟内存最大是256M,在运行一些需要大内存的程序时肯定会报错,提示虚拟内存不足,比如运行Photoshop处理大图片的时候。
B机的虚拟内存却高达4G,加上2G的物理内存,内存高达6G。日常的操作未必要使用这么多的内存,但是对于硬盘空间来说,这是一个很大的浪费。

接下来我们先分析一下网上流行的所谓的虚拟内存的设置技巧。

一个很出名的技巧是大容量物理内存的用户可以禁用虚拟内存来提高系统性能。

首先我们来分析一下虚拟内存到底是什么以及虚拟内存的作用是什么?
在早期,因为内存价格非常昂贵,因此一般电脑上都不会配置太多,如果有时候操作系统和应用程序需要的内存数量超过了计算机中安装的物理内存数量,操作系统就会暂时将不需要访问的数据通过一种叫做“分页(pages)”的操作方式写入到硬盘上一个特殊的文件中,从而可以释放出部分内存给需要立刻使用内存的程序和数据使用。这个位于硬盘上的特殊文件(也可能是一个特殊的分区,比如Linux的swap分区)就是分页文件(也就是虚拟内存文件或叫做交换文件)。对于Windows 2000/XP/2003操作系统,分页文件名为pagefile.sys,默认情况下位于操作系统所在分区的根目录下(也可以手工指定在其它的分区,不过都是在跟目录下)。

正因为存在上述的机制,才有了大内存禁用虚拟内存能提高系统性能的说法,因为内存的速度远远高于硬盘的速度。然而根据Windows的设计,Windows 的许多核心功能都需要使用分页文件(不管此时有没有空余的物理内存),而如果你禁用了所有分页文件,有些第三方的应用软件都可能会遇到内存不足的错误(最明显的是早前版本的Photoshop图形处理软件)。其实在不需要的时候,Windows并不会频繁使用分页文件,因此这样调整系统你并不能获得任何性能上的提高,只是增加了更多的报错提示。

另外一个技巧是使用释放内存的软件,周期性地把内存中的数据强行写入分页文件来释放更多的物理内存。对于这种做法,首先我们要明白,任何程序,只要被执行,就会占用一定的内存空间(具体占用多少内存则取决于程序自己的体积以及载入的数据文件的大小),强行把这些空间中的数据转移到硬盘上,看起来剩余的物理内存是多了,但是这些程序很快又会按照windows或者自己的计算方式做一次相反的操作。

想象一下这种情况:当你的物理内存数量不多,而又运行了比较大型的程序后,必然导致物理内存数急剧减少,按照“优化软件”的设计目的,这时候它开始自作聪明,把占用内存的数据往硬盘上进行分页,而程序的运行确实需要这些数据,导致的结果就是同一时间内,“优化软件”试图将数据分页到硬盘,而操作系统又把数据从硬盘读取到内存,正好是两个相反的操作,这样就极大增加了硬盘的读写,降低了系统的性能。

内存优化的软件在早期的16位操作系统上可能是有效的,因为那时的操作系统由于本身设计的原因,在内存管理上存在问题,或者程序设计不规范,导致程序占用内存后退出时不能及时释放内存的现象。对于32位的操作系统,内存的管理已经日趋完善,不需要这些软件来帮忙了。

为了合理设置虚拟内存大小,首先我们必须知道系统正常运行的时候到底需要多少内存。Windows自带的性能监视器就可以很好第完成这个工作了。

在管理工具中找到“性能”,单击,打开了性能监视器。(或者直接运行perfmon.msc)

http://winos.cn/forum/attachments/Snap33_zRqlG5U9My7f.gif
展开左侧的性能日志和警报,并点击选择记数器日志,在右侧的面板中空白处点击鼠标右键,选择新建日志设置,并命名为“虚拟内存”

http://winos.cn/forum/attachments/Snap34_Ey0PxxPL5Nx6.gif
按“确定”按钮,出现图所示的窗口。

http://winos.cn/forum/attachments/Snap35_1Aqn5s5Ii1Zy.gif
在常规选项卡下,点击添加记数器按钮,在新弹出的窗口的性能对象下拉菜单中选择Paging File,并选择“从列表选择记数器”,然后点击% Usage Peak,在范例中选择“_Total”,并接着点击“添加”按钮,完成的设置应如图设置。

http://winos.cn/forum/attachments/Snap37_3DoU6mrE43DB.gif
关闭窗口,并点击“确定”按钮。

点击“是”创建日志文件。接着打开“日志文件”选项卡,在日志文件类型下拉菜单中选则“文本文件(逗号分隔)”,然后记住“例如”框中显示的日志文件的路径。

http://winos.cn/forum/attachments/Snap38_3Z1uUc6MSf8Q.gif
点击确定。
这个记数器已经开始运行了,你可以在电脑上进行你的日常操作,并尽可能模拟你正常使用电脑的操作习惯。经过几个小时的使用(如果是服务器可以正常运行10-15天),基本上记数器已经可以对你的使用情况做出一个完整的评估了。

注意:
记数器正常运行的时候图标是绿色的,红色的表示已经停止运行。如图:

http://winos.cn/forum/attachments/Snap39_G2EmNawzP7YB.gif
经过一段时间的使用就可以分析记数器的结果了 。

首先停止这个记数器的运行。在记数器日志窗口中,选中我们新建的Page File记数器,然后右键点击,并且选择停止。
用记事本打开日志文件(我们设置的是在C:\perflogs\虚拟内存_000002.csv),看到的如图所示的界面:

http://winos.cn/forum/attachments/Snap40_1DDrOAzr5m2J.gif
在日志中的数值中,记录了分页文件的使用率。
按照图中的数值,该系统一般情况下的分页文件只使用了8%不到。

目前我系统的内存是2G,乘8%约164M,所以我们设置的虚拟内存最小值设置在200M已经足够了。再找到使用率的峰值乘2G,就知道虚拟内存设置的最大值了。假设我的最大峰值是50%,那我的虚拟内存最大值设置在1G已经足够。

虚拟内存的其它优化:

虚拟内存在硬盘上的文件要连续,如果有多个硬盘,应该设置在最快的硬盘上单独的分区中,此分区只放置交换文件,不放置其它文件以提高系统对该分区的使用效率。原理上,文件在硬盘的起始位置速度快于硬盘的末尾位置,所以可以尽量设置该分区在硬盘的开始位置。

[ Edited byyansy on 2007-9-24 11:05 ]

alexlai1000 发表于 2006-4-16 16:06

学习中!!不错!!!

bocwwx 发表于 2006-4-16 16:32

不错学习中

错对无言 发表于 2006-4-16 16:33

也学习一下,以前都比较小看这些的说...

reformer 发表于 2006-4-16 17:47

学习一个,试用中!

luoyibin 发表于 2006-4-16 18:22

谢谢,谢谢,知道怎么设置了

skynet 发表于 2006-4-16 18:31

512mb内存,用下来还是不开虚拟内存整个系统比较快,前提不跑大型软件,否则就出现内存不够的警告了。

yxc 发表于 2006-4-16 19:18

2G物理内存+1.5G虚拟内存,打开这个200M的dwg文件,出现内存不足。。。

[ 本帖最后由 yxc 于 2006-4-16 19:34 编辑 ]

IBMsniper 发表于 2006-4-16 19:59

椤讹綖锝烇綖

karlamy 发表于 2006-4-16 20:00

这里有篇相似的文章,是楼主写的吗?
http://www.pc120.net.cn/home/soft_jq/073952824.htm

淘宝店老板 发表于 2006-4-16 20:33

经典呀!经典,

zyblg2008 发表于 2006-4-16 20:57

我的才256呀,怎么能比呢

pangxuemin0001 发表于 2006-4-16 21:45

1G物理内存,经测试虚拟内存为4.1%-8.1%,这样算来是42M-83M,我就设了64M-128M。

yhvh 发表于 2006-4-16 21:50

汗,这麻烦,直接固定1G了事,反正现在硬盘不断变大,多了移到移动硬盘之类的

ducati888 发表于 2006-4-16 21:57

看看自己到底适合设置多大的虚拟内存??!

yansy 发表于 2006-4-16 21:57

原帖由 karlamy 于 2006-4-16 20:00 发表
这里有篇相似的文章,是楼主写的吗?
http://www.pc120.net.cn/home/soft_jq/073952824.htm

不是。
记得很久前newfan的网友刘辉(微软的MVP,网上ID是.com.cn)写过一篇类似的用性能监控来计算虚拟内存大小的文章。

我这几天在讲2003性能监视相关的课程内容,在课堂上给学生演示了这个例子,下课后就干脆补充了一些资料并整理成文了:)。

老k 发表于 2006-4-16 21:59

384M,暂时不考虑这方面的问题

yansy 发表于 2006-4-16 22:11

原帖由 yhvh 于 2006-4-16 21:50 发表
汗,这麻烦,直接固定1G了事,反正现在硬盘不断变大,多了移到移动硬盘之类的

这篇文章的目的不是教大家设置多大的虚拟内存才合适。

专门网的朋友,好多人都是2G的内存了(包括我自己),但是大家是否真的需要这么多内存呢?这才是写这篇文章的目的。

这周内陆续会有通过性能监视器来检测CPU,硬盘,网络等其它三个子系统的文章出炉,通过对电脑四个子系统的综合考虑来判断如何升级自己的电脑,才能避免头痛医脚的现象,敬请等待。

ibmibeicafy 发表于 2006-4-16 22:16

faint...

fanjianming 发表于 2006-4-16 22:30

好文
支持

pangxuemin0001 发表于 2006-4-17 00:12

原帖由 pangxuemin0001 于 2006-4-16 21:45 发表
1G物理内存,经测试虚拟内存为4.1%-8.1%,这样算来是42M-83M,我就设了64M-128M。
看来不行,系统提示"虚拟内存太小了......".

yansy 发表于 2006-4-17 00:27

原帖由 pangxuemin0001 于 2006-4-17 00:12 发表

看来不行,系统提示"虚拟内存太小了......".
你设置好log后记录的时间不够长……

fioky 发表于 2006-4-17 01:50

学习一下

mewyj 发表于 2006-4-17 08:44

不错,学习了

sgw888 发表于 2006-4-17 09:16

学习一下,觉得以这样的方式来进行分析设置,是比较合理的,也具有说服务力。

fangqiank 发表于 2006-4-17 09:20

都是让windows自动分配的

i2008 发表于 2006-4-17 09:32

原帖由 fangqiank 于 2006-4-17 09:20 发表
都是让windows自动分配的
自动就是1.5倍吧

水无涯 发表于 2006-4-17 10:30

我认为适合自己的就是最科学的。因为每一个个体需求是不一样的。有的是坐坐文档,有的是网络管理、有的是做图形、有的是打游戏。具体问题具体分析。不过这种方法很好

afire 发表于 2006-4-17 10:38

收藏先,,,,,,

xiewg 发表于 2006-4-17 11:02

虚拟内存和硬盘分页文件应该是2个概念吧,通常说的禁用虚拟内存,实际上就是关闭硬盘分页文件,windows还是会强制把物理内存的一部分划成虚拟内存来用的,这个才是通常说的禁用虚拟内存加速的真正效果
页: [1] 2 3
查看完整版本: 【原创】科学合理设置Windows的虚拟内存