通过Netbios复制文件时可怕的Windows Server 2003性能

我们有一个基于Windows Server 2003的服务器通过千兆接口共享一个文件夹,每隔一小时从另一台服务器接收一个10GB的文件。 此服务器是Dell PowerEdge 830,在RAID-1上带有两个带有PERC4 / SC适配器的SCSI磁盘。 转移发生将近10分钟,服务器在转移期间变得不可用。 我们甚至无法打开Windows资源pipe理器,任务pipe理器或通过VNC访问服务器。 我们需要一些关于问题的build议,或者如何进一步追踪问题。

这几乎肯定是由于服务器上的写入缓冲区膨胀,因为入站传输超过了磁盘子系统的写入速率 – 请参阅Mark Russinovitch有关各种Windows版本中networking复制行为的文章。

引擎实现的最大问题之一是,对于涉及大量数据的副本,目标系统上的高速cachingpipe理器后写入线程往往跟不上写入和caching数据的速度。 这会导致数据填满内存,可能会强制其他有用的代码和数据,最终,目标系统的内存将成为所有复制数据以磁盘限制的速度stream动的隧道。

他在这里讨论的引擎是Windows XP(和W2K3)的引擎。

一旦缓冲超过了系统上可用物理内存的总量,除了与该副本相关的写入之外,您将看到物理分页,并且您还有所有标准的Windows IO活动仍在继续。 只要你尝试启动一个新的进程,触发进一步的分页 – 再次放缓一切。

您的磁盘可能有问题,但即使在理想条件下,此服务器上的RAID 1configuration也不太可能能够以比40-50M每秒更快的速度维持10Gig写入数据stream,而您的GigE链接几乎肯定会超过(并且可能容易成倍增加,如果不是稍微多一些的话)。

您的select是:

  1. 添加更多的磁盘,以便arrays更快 – 您需要至less使用4个磁盘RAID 10或6/7磁盘RAID 5,以使您的数据stream写入IO足够高以避免缓冲。
  2. 如果您的Windows Server版本和您的硬件允许的话,增加足够的RAM以缓冲整个stream,或者至less一大块。
  3. find一些方法来扼制传输速率下降到10-20Meg /秒左右。
  4. 升级到W2K8(它有一个更聪明的networking复制缓冲区)。

这听起来很熟悉 – 我一直在与类似的问题搏斗。 看到这两个线程:

将大文件复制到远程服务器会导致其耗尽物理内存

Windows Server 2008 x64,大文件传输和内存使用