2010-08-06 7 views
9

У нас есть «стандартная» трехуровневая архитектура с нашим средним уровнем, размещенным в IIS, и доступ через удаленную сеть .net. Эти ошибки возникают между серверами веб-сервисов и веб-сервисов (фронт-уровня), которые удаляются на серверы приложений (средний уровень). Мы получим эту ошибку 3-10 раз в день из ~ 130 тыс. Вызовов в день.Как мы можем устранить прерывистые ошибки «Существующее соединение было принудительно закрыто», вызванное 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() 

Там нет особых Remoting вызова, который вызывает это произойдет, это может быть любой из них, кажется, исключает любая конкретная причина применения. Единственным общим знаменателем является «Исключение типа: System.Net.Sockets.SocketException Message: Существующее соединение было принудительно закрыто удаленной частью узла« ошибка ».

Передний и средний уровни разделены межсетевым экраном, и мы также используем VIP-устройство. Я сильно подозреваю, что проблема связана с нашей конфигурацией сети/брандмауэра, но наши ребята из сети просто царапают головы и не предлагают никаких предложений.

Хотя показатель сбоя в 0.003% может показаться несущественным, у нас есть партнеры, которые тщательно изучают наши сообщения, и я просто жду, чтобы это стало проблемой, которую они замечают. Я не хочу говорить «я не знаю», когда наступит это время.

Есть ли у кого-нибудь идеи о том, как я мог бы предоставить дополнительную информацию или любые предложения, которые я мог бы сделать нашим сетевым ребятам, чтобы решить эту проблему?

+0

Является ли appdomain в IIS переработке при возникновении исключения? – rene

+0

Как я могу сказать? – JohnOpincar

+0

Рабочий процесс IIS может перерабатываться по нескольким причинам: (в минутах), количество достигнутых запросов, предел памяти достигнут. Это для «нормального» повторного набора в зависимости от конфигурации IIS-пула. Если он перерабатывается по ненормальной причине, у вас должен быть журнал событий, например: System> W3SVC | Предупреждение: пул приложений, обслуживающий процесс «xxx», подвергся фатальной коммуникации ... Для IIS 7 источник «WAS» не «W3SVC». – JoeBilly

ответ

6

проблема была в Cisco CSS. Мы определили это, указав серверы уровня 1 непосредственно на серверы уровня 2 и проработав 48 часов, не наблюдая проблемы. Как только мы определили, что это был CSS, мы исправили эту проблему, отрегулировав безумно низкое значение по умолчанию для этого параметра:

«Потери времени неактивности по умолчанию в секундах для порта TCP или UDP.Если поток простаивает в течение времени, указанного в значении тайм-аута, CSS сбрасывает поток и восстанавливает ресурсы потока. »

Мы установили его в 84 (что составляет 84 16-секундных приращений). default keep-alive для HTTP составляет 120 секунд, значение по умолчанию - слишком низкое.

2

Чтобы проверить повторную загрузку пула приложений, перейдите в свой IIS и откройте Свойства пула приложений, на котором запущена ваша удаленная служба. Вы можете настроить повторное использование пулов приложений с использованием временного интервала, количества запросов или определенного времени.

Вы можете удалить текущие правила утилизации и установить рециркуляцию до тех пор, пока не ожидается соединение, например, 3.00 в ночное время. Затем посмотрите, есть ли исключения.

+1

Правила утилизации по умолчанию находятся на месте (1740 минут). Основываясь на описании там, я не вижу, как это будет проблемой, поскольку «нормальная» переработка происходит только на холостых рабочих процессах, а связи не привязаны к рабочим процессам. – JohnOpincar

2

Это может быть сетевой компонент, вызывающий это. Путем этого можно было бы поместить обе машины (или тестовые машины) в одну и ту же подсеть, затем запустить тест нагрузки и убедиться, что вы не получите ту же ошибку.

других вещей, которые могли бы быть причиной это может быть:

  • таймаут, попробуйте увеличить таймаут значение
  • Слишком большого размера сообщения, попробуйте увеличить размер сообщения допускается, также размер запроса допускается в IIS
  • Вы могли бы поразить некоторое максимальное значение, например, макс вызовов или макс соединений см: http://msdn.microsoft.com/en-us/library/ee377061(v=bts.10).aspx
+0

Все это хорошие предложения. К сожалению, мы провели тесты нагрузки в нашей тестовой среде с нагрузками, которые намного превышают объем нашей продукции, не воспроизводя проблему. Мы не используем WCF, поэтому параметры конфигурации, о которых вы упомянули, не актуальны. Я проверил размер сообщения в журнале IIS, когда мы получили этот сбой, и он совсем невелик. Вероятно, я узнаю, что завтра вы получите щедрость, если никто другой не ответит просто так, чтобы эти очки не пропадали даром. :) – JohnOpincar

+0

Какой брандмауэр и VIP-устройство вы используете? –

+0

Оказывается, это была проблема с Cisco CSS, который у нас был между нашим передним и средним уровнями, чтобы загрузить баланс. Когда мы указывали каждый сервер верхнего уровня непосредственно на сервер среднего уровня, у нас больше не было этой проблемы. Я выложу больше информации по мере ее появления. – JohnOpincar

 Смежные вопросы

  • Нет связанных вопросов^_^