2010-08-06 3 views
9

IIS에서 호스팅되고 .net 원격을 통해 액세스되는 중간 계층을 가진 "표준"3 계층 아키텍처가 있습니다. 이러한 오류는 응용 프로그램 서버 (중간 계층)에 원격 인 웹 및 웹 서비스 서버 (프론트 계층)간에 발생합니다. 이 오류는 당일 약 130,000 건의 전화 중 하루에 3-10 번 발생합니다.Cisco CSS로 인한 간헐적 인 "기존 연결이 강제로 닫혔습니다"오류를 해결하는 방법

예외 및 스택 추적은 항상 여기에 유사 :


이런 일이 원인이 특별한 원격 호출이 없습니다
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 메시지 : 원격 호스트에서 기존 연결이 강제로 닫혔습니다"라는 오류 부분입니다.

전면 및 중간 계층은 방화벽으로 구분되며 VIP 장치도 사용합니다. 나는 우리의 네트워크/방화벽 구성에 대한 문제를 강력하게 의심하지만 우리 네트워크 직원들은 머리를 긁적이며 어떤 제안도하지 않고 있습니다.

0.003 %의 실패율은 중요하지 않겠지 만 우리는 의사 소통을 매우 신중하게 조사하는 파트너를두고 있습니다. 저는이 문제가 알려지기를 기다리고 있습니다. 나는 그 때가되면 "나는 모른다"고 말할 필요가 없다.

더 많은 정보를 제공 할 수있는 방법에 대한 아이디어가 있거나 네트워크 담당자가 해결할 수있는 제안 사항이 있습니까?

+0

예외가 발생할 때 IIS 재활용의 appdomain은 있습니까? – rene

+0

어떻게 알 수 있습니까? – JohnOpincar

+0

IIS 작업자 프로세스는 거의 이유가 없어 재생할 수 있습니다 : 수명이 다되었습니다 (분), 도달 한 요청 수, 메모리 제한에 도달했습니다. IIS -pool- 구성에 따라 "정상적인"리 클럭킹을위한 것입니다. 비정상적인 이유로 리사이클하는 경우 시스템 로그> W3SVC | 경고 : 응용 프로그램 풀 'xxx'를 처리하는 프로세스가 치명적인 통신을 받았습니다. IIS 7의 경우 소스는 'WAS'가 아니며 'W3SVC'가 아닙니다. – JoeBilly

답변

6

문제는 Cisco CSS이었다 : 최대 호출 또는 최대 연결 참조 같은 IIS

  • 에서 허용 당신은 어떤 최대 값을 타격 할 수있다. 우리는 계층 1 서버를 계층 2 서버에 직접 연결하고 문제를 관찰하지 않고 48 시간 동안 진행함으로써이를 결정했습니다. 이것이 CSS라고 판단되면이 매개 변수의 현저하게 낮은 기본값을 조정하여이 문제를 해결했습니다.

    "TCP 또는 UDP 포트의 기본 유휴 비활성 시간 제한 (초).시간 제한 값에 지정된 시간 동안 플로우가 유휴 상태이면 CSS는 플로우를 찢어 놓고 플로우 리소스를 회수합니다. "

    이 값을 84로 설정합니다 (16 초마다 84로 증가합니다). HTTP의 기본 연결 유지 시간은 120 초이며 기본값은 너무 낮습니다.

  • 2

    응용 프로그램 풀 재활용을 확인하려면 IIS로 이동하여 원격 서비스가 실행되고있는 응용 프로그램 풀의 속성을 엽니 다. 시간 간격, 요청 수 또는 특정 시간을 정의하여 응용 프로그램 풀의 재활용을 구성 할 수 있습니다.

    현재 재활용 규칙을 제거하고 연결이 예상되지 않는 시간 (예 : 밤에는 3.00)으로 재활용을 설정할 수 있습니다. 그런 다음 예외가 발생하는지 확인하십시오.

    +1

    기본 재활용 규칙이 제자리에 있습니다 (1740 분). 거기에 대한 설명을 토대로, "정상적인"재활용은 유휴 작업자 프로세스에서만 발생하고 연결은 작업자 프로세스에 연결되지 않기 때문에 이것이 어떻게 문제가되는지 알지 못합니다. – JohnOpincar

    2

    이 문제를 일으키는 네트워크 구성 요소 일 수 있습니다. 이 문제를 해결하는 방법은 두 시스템 (또는 테스트 시스템)을 동일한 서브넷에 배치 한 다음 부하 테스트를 실행하고 동일한 오류가 발생하지 않는지 확인하는 것입니다.

    이 될 수 원인이 될 수있는 다른 것들

    :

    +0

    이것들은 모두 좋은 제안입니다. 불행히도, 우리는 문제를 재현하지 않고 생산량을 훨씬 초과하는 부하로 "테스트"환경에서 부하 테스트를 수행했습니다. 언급 한 구성 옵션이 적합하지 않으므로 WCF를 사용하지 않습니다. 우리가이 실패를 겪었을 때 IIS 로그에서 메시지 크기를 확인했습니다. 아무도 대답하지 않았다면 내일 아침에 현상금을 알게 될 것이므로 그 점들은 낭비되지 않을 것입니다. :) – JohnOpincar

    +0

    어떤 방화벽 및 VIP 장치를 사용하고 있습니까? –

    +0

    로드 균형을 맞추기 위해 프론트와 미들 티어 간의 Cisco CSS에 문제가 있음을 알 수 있습니다. 각 프론트 티어 서버를 중간 계층 서버로 직접 향하게하자 더 이상이 문제가 발생하지 않았습니다. 더 많은 정보가 게시되면 알려 드리겠습니다. – JohnOpincar