我已经获得了Windows Server 2003 SP1系统(10.a.bbb.ccc)上的共享,这是一个文件和打印机服务器,并且定期将大文件复制到该共享中。 但是,偶尔会有这样的复制失败。 当使用Robocopy(在10.xxx.yy.zzz)重现这个问题时,我得到了类似的东西
70.4% 2013/07/31 11:20:21 ERROR 64 (0x00000040) Copying File <<file name removed>> The specified network name is no longer available. Waiting 30 seconds... Retrying... New File 105.2 m <<file name removed>> 0.0%
dumpcap + Wireshark显示,当发生这种情况时,在突然复制的过程中,服务器不再接受TCP端口445上的任何数据,将窗口大小设置为零:
No. Time Source Destination Protocol Length Info 7303 5.841186000 10.a.bbb.ccc 10.xxx.yy.zzz TCP 60 [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0 7304 6.149715000 10.xxx.yy.zzz 10.a.bbb.ccc TCP 55 [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU] 7305 6.150137000 10.a.bbb.ccc 10.xxx.yy.zzz TCP 60 [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0 7306 6.749711000 10.xxx.yy.zzz 10.a.bbb.ccc TCP 55 [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU] 7307 6.750087000 10.a.bbb.ccc 10.xxx.yy.zzz TCP 60 [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0 7308 7.946779000 10.xxx.yy.zzz 10.a.bbb.ccc TCP 55 [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU] 7309 7.947130000 10.a.bbb.ccc 10.xxx.yy.zzz TCP 60 [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0 7310 10.349783000 10.xxx.yy.zzz 10.a.bbb.ccc TCP 55 [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU] 7311 10.350201000 10.a.bbb.ccc 10.xxx.yy.zzz TCP 60 [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0 7312 15.149910000 10.xxx.yy.zzz 10.a.bbb.ccc TCP 55 [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU] 7313 15.150283000 10.a.bbb.ccc 10.xxx.yy.zzz TCP 60 [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0 7314 24.747096000 10.xxx.yy.zzz 10.a.bbb.ccc TCP 55 [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU] 7315 24.756210000 10.a.bbb.ccc 10.xxx.yy.zzz TCP 60 [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0 7316 43.958531000 10.xxx.yy.zzz 10.a.bbb.ccc TCP 55 [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU] 7317 43.958863000 10.a.bbb.ccc 10.xxx.yy.zzz TCP 60 [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0 7318 75.216401000 10.xxx.yy.zzz 10.a.bbb.ccc TCP 54 57918 > microsoft-ds [RST, ACK] Seq=6973070 Ack=10864 Win=0 Len=0 7319 75.225543000 10.xxx.yy.zzz 10.a.bbb.ccc TCP 66 55972 > microsoft-ds [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1 7320 75.225933000 10.a.bbb.ccc 10.xxx.yy.zzz TCP 66 microsoft-ds > 55972 [SYN, ACK] Seq=0 Ack=1 Win=16384 Len=0 MSS=1460 WS=1 SACK_PERM=1
所以在70秒之后,客户端(这里是Robocopy)把它叫做退出。
我的问题:这是Windows共享的已知问题吗? 什么可以在文件服务器上进行调查/debugging/跟踪? 有什么具体的设置,我们需要看看或试验?
提前致谢!
我同意@suprjami,并希望提供这种可能的探索途径:而不是服务器的磁盘速度太慢 ,认为他们可能会失败(典型的硬盘驱动器每个坏集群读取冻结约8秒),严重分散,空间不足(导致严重的碎片和繁琐的磁盘抖动),或者在计算机上运行严重的CPU限制或磁盘限制任务,导致其他任何事情(包括networking和磁盘子系统)瘫痪。 我build议检查服务器的事件查看器中的磁盘错误,并用任务pipe理器或Process Explorer打开一些列来显示页面错误,CPU使用率和I / O读取字节和写入字节,并查看数字在做什么。
鉴于ZeroWindow是TCP接收缓冲区已满的症状,我敢打赌,问题是要么消耗服务器上100%的CPU,要么导致严重过度的networkingstream量进入服务器,并locking一切。
另一种可能性是中间设备的TCP实现中的缓冲区溢出(bufferbloat),如果该设备正在修改以任何方式中继的分组(即NAT)。 您的转账是否突然降低,转移率下降?
在查看TCP调整参数(可以调整Windows上的TCP堆栈,但99.9%的时间,它的自动缩放工作正常)之前,你可以给更多的背景? 例如:接收服务器的规格是什么,同一个第2层networking上的客户端和服务器都是什么,网卡运行速度等等。
另外,是否值得尝试ROBOCOPY的/ IPG参数,可能是/ R:和/ W :(重试和等待)参数?
TCP零窗口意味着接收主机过度。 它已经告诉发送主机停止发送数据,因为它需要一些时间来处理它已经得到的。
这听起来像服务器上的磁盘太慢了,客户端最终放弃和连接的时间。
在离开客户端时减慢传输速度,或将更快的磁盘放入服务器。