التنازع وخفض مستوى أداء deadlocks عند إجراء استدعاءات لخدمات ويب من أحد تطبيقات ASP.NET

ترجمات الموضوعات ترجمات الموضوعات
معرف المقالة: 821268 - عرض المنتجات التي تنطبق عليها هذه المقالة.
توسيع الكل | طي الكل

في هذه الصفحة

الأعراض

عند إجراء استدعاءات لخدمات ويب من تطبيق Microsoft ASP.NET، قد تواجهك التنازع وضعف الأداء وحالات التوقف التام. عملاء قد تقرير أن طلبات التوقف عن الاستجابة (أو "تعليق") أو تستغرق وقتاً طويلاً التنفيذ. في حالة الاشتباه في حالة توقف تام، قد يتم إعادة استخدام عملية العامل. قد تتلقى الرسائل التالية في سجل أحداث التطبيق.
  • إذا كنت تستخدم 5.0 من خدمات معلومات إنترنت (IIS)، تتلقى الرسائل التالية في سجل التطبيق:

       Event Type:     Error
       Event Source:   ASP.NET 1.0.3705.0
       Event Category: None
       Event ID:       1003
       Date:           5/4/2003
       Time:           6:18:23 PM
       User:           N/A
       Computer:       <ComputerName>
       Description:
          aspnet_wp.exe  (PID: <xxx>) was recycled because it was suspected to be in a deadlocked state.
          It did not send any responses for pending requests in the last 180 seconds.

  • إذا كنت تستخدم IIS 6.0، تتلقى الرسائل التالية في سجل التطبيق:

       Event Type:     Warning
       Event Source:   W3SVC-WP
       Event Category: None
       Event ID:       2262
       Date:           5/4/2003
       Time:           1:02:33 PM
       User:           N/A
       Computer:       <ComputerName>
       Description:
          ISAPI 'C:\Windows\Microsoft.net\Framework\v.1.1.4322\aspnet_isapi.dll' reported itself as
          unhealthy for the following reason: 'Deadlock detected'.

  • إذا كنت تستخدم IIS 6.0، تتلقى الرسائل التالية في سجل النظام:

       Event Type:     Warning
       Event Source:   W3SVC
       Event Category: None
       Event ID:       1013
       Date:           5/4/2003
       Time:           1:03:47 PM
       User:           N/A
       Computer:       <ComputerName>
       Description:
          A process serving application pool 'DefaultAppPool' exceeded time limits during shut down.
          The process id was '<xxxx>'.

قد تتلقى أيضا الخطأ الاستثناء التالي رسالة عند تقوم بإجراء استدعاء الأسلوب HttpWebRequest.GetResponse :
"System.InvalidOperationException: لم يكن هناك مؤشرات ترابط حرة كافية في كائن ThreadPool object لإكمال عملية ".
قد تتلقى أيضا رسالة الخطأ التالية استثناء في المستعرض:
"HttpException (0x80004005): Request timed في الخارج. "
ملاحظة تنطبق هذه المقالة أيضا على التطبيقات التي تتقدم بطلبات HttpWebRequest مباشرة.

السبب

قد تحدث هذه المشكلة لأن ASP.NET يحدد عدد مؤشرات ترابط worker وإنجاز منفذ مؤشرات الترابط التي يمكن استخدام استدعاء لتنفيذ طلبات.

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

على سبيل المثال، افترض أن ThreadPool يقتصر على 10 مؤشرات ترابط العاملين وتنفيذ كافة مؤشرات ترابط العامل 10 حاليا من التعليمات البرمجية التي تنتظر رد اتصال لتنفيذ. يمكن عدم تنفيذ رد الاتصال، لأنه يتم حظر أي عناصر العمل في قائمة الانتظار إلى قام إلى مؤشر ترابط يصبح متوفراً.

هي مصدر محتمل آخر خلاف المعلمة maxconnection مساحة الاسم النظام يستخدم لتحديد عدد الاتصالات. بشكل عام، يعمل هذا الحد كما هو متوقع. ومع ذلك، إذا حاول أن تجعل العديد من العديد من التطبيقات الطلبات إلى عنوان IP واحد في نفس الوقت، عليك الانتظار لمؤشرات الترابط اتصال متوفرة.

الحل

لحل هذه المشكلات، يمكنك ضبط المعلمات التالية في الملف Machine.config ليناسب الموقف لديك:
  • ماكسووركيرثريدس
  • مينووركيرثريدس
  • ماكسيوثريدس
  • minFreeThreads
  • مينلوكالريقويستفريثريدس
  • maxconnection
  • ب executionTimeout
لحل هذه المشكلات بنجاح، تنفيذ الإجراءات التالية:
  • تحديد عدد طلبات ASP.NET التي يمكن تنفيذها في نفس الوقت إلى 12 تقريبا كل وحدة المعالجة المركزية.
  • تسمح عمليات الاسترجاعات خدمة ويب لاستخدام مؤشرات الترابط في ThreadPool بحرية.
  • حدد قيمة مناسبة للمعلمة maxconnections . قاعدة التحديد الخاص بك على عدد عناوين IP و AppDomains التي يتم استخدامها.
ملاحظة التوصية بتحديد عدد طلبات ASP.NET 12 كل وحدة المعالجة المركزية عشوائية قليلاً. ومع ذلك، قد ثبت هذا الحد تعمل بشكل جيد معظم التطبيقات.

ماكسووركيرثريدس و ماكسيوثريدس

يستخدم ASP.NET إعدادات التكوين التالية لتحديد الحد الأقصى لعدد مؤشرات ترابط العامل ومؤشرات ترابط الإكمال الموجودة استخدام:
<processModel maxWorkerThreads="20" maxIoThreads="20">
المعلمة ماكسووركيرثريدس والمعلمة ماكسيوثريدس يتم ضمنياً مضروباً في العدد من وحدات المعالجة المركزية. من أجل على سبيل المثال، إذا كان لديك اثنين من المعالجات، الحد الأقصى لعدد مؤشرات ترابط العامل ما يلي:
2 * ماكسووركيرثريدس

minFreeThreads و مينلوكالريقويستفريثريدس

يتضمن ASP.NET أيضا تكوين التالي الإعدادات التي تحدد عدد مؤشرات ترابط العاملين وإنجاز منفذ مؤشرات الترابط يجب أن تكون متوفرة لبدء طلب محلي أو طلب بعيد:
<httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="8">
إذا لا تتوفر كافية مؤشرات الترابط، يتم الطلب في قائمة الانتظار حتى تكون كافية مؤشرات الترابط الحرة لإجراء الطلب. لذلك، سيتم ASP.NET عدم تنفيذ أكثر من العدد التالي من الطلبات في نفس الوقت:
(ماكسووركيرثريدس*عدد وحدات المعالجة المركزية)-minFreeThreads
ملاحظة المعلمة minFreeThreads والمعلمة مينلوكالريقويستفريثريدس يتم لا ضمنياً مضروباً في العدد من وحدات المعالجة المركزية.

مينووركيرثريدس

اعتبارا من ASP.NET 1.0 Service Pack 3 و ASP.NET 1.1، يتضمن ASP.NET أيضا إعداد التكوين التالي الذي يحدد كيفية العديد من مؤشرات ترابط العاملين قد تتاح مباشرة لخدمة جهاز التحكم عن بعد طلب.
<processModel minWorkerThreads="1">
مؤشرات الترابط التي يتم التحكم فيها عن طريق هذا الإعداد يمكن إنشاؤها بمعدل أسرع بكثير من مؤشرات الترابط العاملة التي يتم إنشاؤها من الخاصة ب CLR الافتراضي "مؤشر الترابط-ضبط" إمكانيات. هذا الإعداد بتمكين ASP.NET لطلبات الخدمة التي قد تكون فجأة ملء قائمة انتظار طلبات ASP.NET سبب تباطؤ في نهاية الخلفية ملقم، موجه مفاجئة من الطلبات من طرف العميل، أو ما شابه يسبب ذلك ارتفاعا مفاجئاً في عدد الطلبات في قائمة الانتظار. علامة القيمة الافتراضية للمعلمة مينووركيرثريدس هي 1. نوصي بتعيين قيمة للمعلمة مينووركيرثريدس للقيمة التالية.
minWorkerThreads = maxWorkerThreads / 2
بشكل افتراضي، المعلمة مينووركيرثريدس غير موجودة في ملف Web.config أو الملف Machine.config. يتم إعداد هذا ضمنياً ضرب عدد وحدات المعالجة المركزية.

maxconnection

تحدد المعلمة maxconnection عدد الاتصالات الممكنة يصبح عنوان IP محدد. يظهر المعلمة كما يلي:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://65.53.32.230" maxconnection="12">
</connectionManagement>
إذا كانت تشير التعليمات البرمجية للتطبيق التطبيق حسب اسم المضيف بدلاً من عنوان IP، يجب أن يظهر المعلمة كما يلي:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://hostname" maxconnection="12">
</connectionManagement>
وأخيراً، إذا تم استضافة التطبيق على منفذ مختلف 80، المعلمة يجب أن يشمل منفذاً غير قياسي في URI، مشابهة لما يلي:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://hostname:8080" maxconnection="12">
</connectionManagement>
كافة الإعدادات الخاصة بالمعلمات التي تمت مناقشتها سابقا في هذه المقالة على مستوى العملية. ومع ذلك، يتم تطبيق إعداد المعلمة maxconnection إلى مستوى مجال التطبيق. بشكل افتراضي، لأنه يتم تطبيق هذا الإعداد على مستوى مجال التطبيق، يمكنك إنشاء كحد أقصى لاتصالين لعنوان IP معين من كل AppDomain في الخاص بك عملية.

ب executionTimeout

يستخدم ASP.NET إعداد التكوين التالي إلى الحد الأقصى لوقت تنفيذ الطلب:
<httpRuntime executionTimeout="90"/>
يمكنك أيضا تعيين هذا الحد باستخدام الخاصية Server.ScriptTimeout .

ملاحظة إذا قمت بزيادة قيمة المعلمة ب executionTimeout ، قد تحتاج أيضا تعديل processModel responseDeadlockInterval إعداد المعلمة.

توصيات

قد لا تعمل الإعدادات الموصى بها في هذا القسم كافة التطبيقات. ومع ذلك، المعلومات الإضافية التالية قد تساعدك على إجراء التعديلات المناسبة.

If إجراء واحد استدعاء خدمة ويب إلى عنوان IP واحد من كل صفحة ASPX، توصي Microsoft باستخدام إعدادات التكوين التالية:
  • تعيين قيم المعلمة ماكسووركيرثريدس والمعلمة ماكسيوثريدس إلى 100.
  • تعيين قيمة المعلمة maxconnection إلى 12 *N (حيث N عدد وحدات المعالجة المركزية التي لديك).
  • عين قيم المعلمة minFreeThreads إلى 88 *N والمعلمة مينلوكالريقويستفريثريدس إلى76 *N.
  • تعيين قيمة مينووركيرثريدس إلى 50. تذكر أن مينووركيرثريدس غير موجود في ملف التكوين بشكل افتراضي. يجب إضافته.
بعض هذه التوصيات تتضمن صيغة بسيطة تتضمن رقم من وحدات المعالجة المركزية على خادم. المتغير الذي يمثل عدد وحدات المعالجة المركزية في الصيغ N. هذه الإعدادات، إذا كان لديك تمكين، توازي تشغيل مؤشرات الترابط يجب استخدام عدد وحدات المعالجة المركزية المنطقية بدلاً من عدد وحدات المعالجة المركزية الفعلية. على سبيل المثال، إذا كان لديك ملقم معالج أربعة مع تمكين، ثم توازي تشغيل مؤشرات الترابط قيمة N في الصيغ ستكون 8 بدلاً من 4.

ملاحظة عند استخدام هذا التكوين، يمكنك تنفيذ 12 كحد أقصى طلبات ASP.NET كل وحدة المعالجة المركزية في نفس الوقت لأن 100 88 = 12. لذلك، يقل عن 88 *N العامل مؤشرات الترابط و 88 *N يتم إنجاز منفذ مؤشرات الترابط متوفر للاستخدامات الأخرى (مثل أما بالنسبة لعمليات الاسترجاعات خدمة ويب).

على سبيل المثال، لديك ملقم بأربعة معالجات وتوازي تشغيل مؤشرات الترابط تمكين. استناداً إلى هذه الصيغ، يمكنك استخدام القيم التالية إعدادات التكوين المذكورة في هذه المقالة.
<system.web>
	<processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50"/>
	<httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608"/>
</system.web>

<system.net>
	<connectionManagement>
		<add address="[ProvideIPHere]" maxconnection="96"/>
	</connectionManagement>
</system.net>

أيضا، عند استخدام هذا التكوين، اتصالات 12 متوفرة كل وحدة المعالجة المركزية كل عنوان IP لكل AppDomain. لذلك، في ما يلي السيناريو، يحدث التنازع قليل جداً عند انتظار الطلبات اتصالات، وقام عدم استنفاد:
  • يستضيف الويب التطبيق (AppDomain) واحد فقط.
  • يجعل كل طلب لصفحة ASPX طلب خدمة ويب واحد.
  • يتم تقديم كافة الطلبات إلى عنوان IP نفسه.
ومع ذلك، عند استخدام هذا التكوين، وحدات السيناريو التي تتضمن أحد الإجراءات التالية قد تستخدم اتصالات كثيرة جداً:
  • يتم تقديم الطلبات إلى عناوين IP متعددة.
  • يتم تقديم الطلبات الذي تمت إعادة توجيهه (رمز الحالة 302).
  • تتطلب طلبات المصادقة.
  • طلبات من AppDomains متعددة.
في هذه السيناريوهات، أنها لفكرة جيدة لاستخدام قيمة أقل المعلمة maxconnection والقيم الأعلى للمعلمة minFreeThreads والمعلمة مينلوكالريقويستفريثريدس .

تصريح

هذا السلوك حسب التصميم.

معلومات أخرى

إذا كنت تعاني من ضعف الأداء والتنازع على IIS 7.0 جنبا إلى جنب مع ASP.NET، انتقل إلى المدونات Microsoft التالية:
استخدام مؤشر ترابط ASP.NET على IIS 7.5 IIS 7.0 و IIS 6.0

تعليق ASP.net في IIS 7.0

مراجع

لمزيد من المعلومات، انتقل إلى موقع ويب شبكة مطوري Microsoft (MSDN) التالي:
تحسين أداء ASP.NET

الخصائص

معرف المقالة: 821268 - تاريخ آخر مراجعة: 25/ربيع الأول/1434 - مراجعة: 1.0
تنطبق على
  • Microsoft .NET Framework 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
كلمات أساسية: 
kbprb kbmt KB821268 KbMtar
ترجمة آلية
هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية
اضغط هنا لرابط المقالة باللغة الانجليزية821268

إرسال ملاحظات

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com