كيف يمكننا استكشاف أخطاء متقطعة "اتصال موجود كان مغلقًا بالقوة" بسبب Cisco CSS

StackOverflow https://stackoverflow.com/questions/3426885

سؤال

لدينا الهندسة المعمارية "القياسية" الثلاثة مع استضافة الطبقة الوسطى لدينا في IIS والوصول إليها عبر .NET Remoting. تحدث هذه الأخطاء بين خوادم خدمات الويب وخدمات الويب الخاصة بنا (الطبقة الأمامية) التي تتجه عن بعد لخوادم التطبيق (الطبقة الوسطى). سنحصل على هذا الخطأ من 3 إلى 10 مرات في اليوم من بين حوالي 130 ألف مكالمات إجمالية في اليوم.

الاستثناء وتتبع المكدس يشبهان دائمًا هذا:


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 ٪ قد يبدو غير مهم ، إلا أن لدينا شركاء يقومون بتدقيق اتصالاتنا بعناية فائقة وأنا فقط في انتظار أن تصبح هذه مشكلة يلاحظونها. لا أريد أن أقول "لا أعرف" عندما يأتي ذلك الوقت.

هل لدى أي شخص أي أفكار حول كيفية تقديم مزيد من المعلومات أو أي اقتراحات يمكنني تقديمها إلى شبابنا لرجال الشبكات لحل هذا؟

هل كانت مفيدة؟

المحلول

كانت المشكلة Cisco CSS. لقد قررنا ذلك من خلال توجيه خوادم المستوى 1 مباشرة إلى خوادم المستوى 2 والذهاب 48 ساعة دون مراقبة المشكلة. بمجرد أن نقرر أنها كانت CSS ، قمنا بتصحيح هذه المشكلة عن طريق ضبط القيمة الافتراضية المنخفضة بجنون لهذه المعلمة:

"مهلة عدم نشاط التدفق الافتراضية ، في ثوانٍ ، لمنفذ TCP أو UDP. إذا كان التدفق في وضع الخمول لمقدار الوقت المحدد في قيمة المهلة ، فإن CSS تمزق التدفق ويستعيد موارد التدفق."

قمنا بتعيين هذا على 84 (وهو 84 زيادات 16 ثانية). نظرًا لأن الاحتفاظ الافتراضي لـ HTTP هو 120 ثانية ، كانت القيمة الافتراضية منخفضة للغاية.

نصائح أخرى

للتحقق من إعادة تدوير تجمع التطبيقات ، انتقل إلى IIS وفتح خصائص تجمع التطبيقات التي تعمل عليها خدمة البند الخاصة بك. يمكنك تكوين إعادة تدوير تجمعات التطبيقات باستخدام فاصل زمني أو عدد الطلبات أو تحديد أوقات محددة.

يمكنك إزالة قواعد إعادة التدوير الحالية وتعيين إعادة تدوير إلى وقت لا يتوقع فيه أي اتصالات ، مثل 3.00 في الليل. ثم معرفة ما إذا كانت الاستثناءات تحدث.

يمكن أن يكون مكون الشبكة يسبب هذا. تتمثل طريقة استبعاد ذلك في وضع كلا الجهازين (أو آلات الاختبار) على نفس الشبكة الفرعية ، ثم قم بإجراء اختبار تحميل ، والتحقق من أنك لا تحصل على نفس الخطأ.

يمكن أن تكون الأشياء الأخرى التي يمكن أن تسبب ذلك:

  • مهلة ، حاول زيادة قيم المهلة
  • حجم رسالة كبير جدًا ، حاول زيادة حجم الرسالة المسموح بها ، وأيضًا حجم الطلب المسموح به في IIS
  • يمكن أن تصل إلى بعض القيمة القصوى ، مثل Max Calls أو Max Connections انظر: http://msdn.microsoft.com/en-us/library/EE377061(V=BTS.10).aspx
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top