通过 Netbios 复制文件时 Windows Server 2003 性能极差

通过 Netbios 复制文件时 Windows Server 2003 性能极差

我们有一台基于 Windows Server 2003 的服务器,它通过千兆位接口共享一个文件夹,每小时从另一台服务器接收一个 10GB 的文件。这台服务器是一台 Dell PowerEdge 830,带有两个 SCSI 磁盘(RAID-1 上),带有一个 PERC4/SC 适配器。传输大约需要 10 分钟,传输期间服务器无法使用。我们甚至无法打开 Windows 资源管理器、任务管理器或通过 VNC 访问服务器。我们需要一些建议,了解问题是什么,或者如何进一步跟踪以找到问题。

答案1

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

该引擎实现的最大问题之一是,对于涉及大量数据的副本,目标系统上的缓存管理器写入后线程通常无法跟上数据写入和缓存到内存中的速率。这会导致数据填满内存,可能迫使其他有用的代码和数据退出,最终,目标系统的内存变成一条隧道,所有复制的数据以受磁盘限制的速率通过该隧道流动。

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

一旦缓冲量超过系统上可用的物理 RAM 总量,除了与复制相关的写入之外,您还将看到物理分页,并且所有标准 Windows IO 活动仍在尝试继续。一旦您尝试启动触发进一步分页的新进程,一切都会再次变慢。

您的磁盘可能有问题,但即使在理想条件下,此服务器上的 RAID 1 配置也不可能维持比约 40-50Meg/秒快得多的 10Gig 写入流,而您的 GigE 链路几乎肯定会超过这个速度(并且很容易是这个速度的两倍,甚至略多)。

您的选择是:

  1. 添加更多磁盘以使阵列更快 - 您至少需要使用 4 磁盘 RAID 10 或 6/7 磁盘 RAID 5 来使您的流式写入 IO 足够高以避免缓冲。
  2. 增加足够的 RAM 来缓冲整个流,或者至少缓冲其中的很大一部分(如果您的 Windows Server 版本和硬件允许的话)。
  3. 找到某种方法将传输速率降低到大约 10-20Meg/秒。
  4. 升级到 W2K8(具有更智能的网络复制缓冲区)。

答案2

这听起来很熟悉——我也一直在努力解决类似的问题。请参阅以下两个帖子:

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

Windows Server 2008 x64、大文件传输和内存使用情况

相关内容