代码之家  ›  专栏  ›  技术社区  ›  JohnOpincar

如何解决Cisco CSS导致的间歇性“现有连接被强制关闭”错误

  •  9
  • JohnOpincar  · 技术社区  · 14 年前

    异常和堆栈跟踪始终类似于以下内容:


    Exception Type: System.Net.WebException
    Message: The underlying connection was closed: An unexpected error occurred on a receive.
    
    Server stack trace: 
       at System.Runtime.Remoting.Channels.Http.HttpClientTransportSink.ProcessResponseException(WebException webException, HttpWebResponse& response)
       at System.Runtime.Remoting.Channels.Http.HttpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
       at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)
    
    Exception rethrown at [0]: 
       at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       at XXXXX.BusinessFacade.Interface.XXXXInterface.SubmitXXXX(
       at XXX.XXXXWebServicesLibrary.XXXXService.CreateXXXXXX.RunXXXXMethod()
       at XXX.XXXXWebServicesLibrary.XXXXService.XXXXXXMethod`2.RunMethod()
       at XXX.XXXXWebServicesLibrary.XXXXXWebMethod`2.Run()HandleReturnMessage()
    Inner Exception: 
    
    Exception Type: System.IO.IOException
    Message: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
       at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
       at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
       at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)Read()
    Inner Exception: 
    
    Exception Type: System.Net.Sockets.SocketException
    Message: An existing connection was forcibly closed by the remote host
       at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
       at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)Receive()
    

    没有特定的远程处理调用会导致这种情况发生,可能是其中任何一个调用似乎排除了任何特定于应用程序的原因。唯一的共同点是“异常类型:System.Net.Sockets.SocketException消息: 错误的“远程主机”部分强制关闭了现有连接 .

    虽然0.003%的失败率似乎微不足道,但我们的合作伙伴非常仔细地检查我们的通信,我只是在等待这成为他们注意到的问题。到时候我不想说“我不知道”。

    有没有人对我如何能提供更多的信息或我可以向我们的网络人员提出任何建议来解决这个问题有什么想法?

    3 回复  |  直到 13 年前
        1
  •  7
  •   JohnOpincar    13 年前

    问题是思科CSS。我们通过将第1层服务器直接指向第2层服务器并在48小时内没有观察到问题来确定这一点。一旦我们确定是CSS,我们就通过调整这个参数非常低的默认值来纠正这个问题:

    TCP或UDP端口的默认流不活动超时(秒)。如果某个流在超时值中指定的时间内处于空闲状态,CSS将中断该流并回收流资源。“

    我们将其设置为84(以16秒为增量为84)。由于HTTP的默认保持活动状态是120秒,因此默认值太低。

        2
  •  2
  •   Florian von Spiczak    14 年前

    要检查应用程序池的回收,请转到IIS并打开运行远程处理服务的应用程序池的属性。 您可以使用时间间隔、请求数或定义特定时间来配置应用程序池的回收。

    您可以删除当前的回收规则,并将回收时间设置为不需要连接的时间,如夜间3点。然后看看是否还有例外。

        3
  •  2
  •   Shiraz Bhaiji    14 年前

    可能是网络组件造成的。排除这种情况的方法是将两台机器(或测试机器)放在同一个子网中,然后运行负载测试,并验证没有得到相同的错误。

    其他可能导致它的因素可能是: