以下引用scegg在2006-1-22 14:10:21的发言: 41楼正解。
Server家族的系统均支持打开大缓存支持。所有的复制操作都会使用所有可用的内存进行缓存。缺点就是复制大文件的时候搞不好就会可用内存不够。 |
其实并不是Server独有的功能,XP和2003里面系统属性里面内存分配策略都可以选择使用更多内存优先作为缓存...
但是...Windows在内存管理方面有的时候的确是非常的愚蠢...我都不好说了....当选择使用更多内存优先作为缓存时,在连续复制大量的大文件(>1G)时会可能产生连锁恶性反应...
1. Windows尽量的把物理内存分配给文件系统,当现有的空闲内存分配完后,就会开始将后台程序以及部分的核心内存转移到交换文件上(也有可能那些内存本来是干净的,也就顺便被Windows利用了)
2. 这个时候,有一些程序开始请求一些交换出去的页,但是内存已经被占用满,然后Windows就把部分占用的内存页写出到交换文件,然后把需要的页读回来
* 问题出现了,愚蠢的Windows居然不知道在这种情况下减少分配给文件系统的缓存,以减少再次发生页面错误....而且更加过分的是,有的时候它居然把分配给文件系统的缓存也"交换"到了交换文件上!
* 让我们来看看这种情况下的硬盘操作:
文件复制
1. 文件读取
2. 交换文件写 (老的缓存页交换出)
3. 交换文件读 (出现页面错误的缓存页交换入)
4. 文件写
其他进程
1. 交换文件写 (老的缓存页交换出)
2. 交换文件读 (出现页面错误的缓存页交换入)
一个小小的IDE硬盘操作队列里面居然有6个任务.....这个时候硬盘已经开始狂响,而每个任务的执行速度估计也就下降到几百K每秒....因为部分内核被交换出,因此,用不了多长时间,有几页的核心内存出现页面错误,于是再雪上加霜...因为核心部分的代码多涉及中断,因此系统中断队列阻塞——出现这种情况就比较的明显了,因为你的鼠标已经开始反应不灵活,最后干脆就停下来不动了....
于是整个系统就处于典型的连锁恶性反应(Thrashing)中,少则几十秒,多则几分钟,这段时间对键盘、鼠标、网络等等的输入均无反应.....等到系统恢复反应时,一般来说所有的TCP连接早就超时中断了....
这是典型的因为内存管理不善造成的后果,在256MB内存下反应最强烈(像当年刻录机保护技术还不成熟,因此烧飞了无数的DVD-R),1G内存下也不少见,包括HyperThreaded的CPU...
Server2003用了2年,XP前后用了3年,烂起来都差不多 -_-||