2012-06-07 14 views
29

following थॉमस मार्क्वर्ट द्वारा आलेख वर्णन करता है कि आईआईएस एएसपी.Net अनुरोधों को कैसे प्रबंधित करता है, अधिकतम/न्यूनतम सीएलआर कार्यकर्ता धागे/प्रबंधित आईओ थ्रेड जिन्हें चलाने के लिए कॉन्फ़िगर किया जा सकता है, विभिन्न अनुरोध पंक्तियां शामिल हैं और उनके डिफ़ॉल्ट आकार।एएसपी.नेट आईआईएस - अनुरोध कब कतारबद्ध हैं?

अब लेख के अनुसार, निम्नलिखित IIS 6.0 में होता है:

  1. ASP.NET आईआईएस आईओ थ्रेड के लिए एक आईआईएस आईओ थ्रेड से अनुरोध और पदों "HSE_STATUS_PENDING"
  2. अनुरोध है ऊपर उठाता एक सीएलआर वर्कर थ्रेड
  3. यदि अनुरोध उच्च विलंबता के हैं और सभी धागे पर कब्जा कर लिया गया है (थ्रेड गिनती httpRuntime.minFreeThreads तक पहुंचती है), तो अनुरोध आवेदन स्तर अनुरोध कतार में पोस्ट किए जाते हैं (यह कतार प्रति AppDomain है)
  4. इसके अलावा एएसपी.नेट समवर्ती निष्पादन अनुरोधों की संख्या की जांच करता है। लेख में कहा गया है कि "अगर समवर्ती क्रियान्वित करने के अनुरोधों की संख्या बहुत अधिक है" यह एक ASP.NET वैश्विक अनुरोध कतार में आने वाले अनुरोधों (इस कार्यकर्ता प्रक्रिया प्रति है) (कृपया चेक अपडेट 2)

मैं कतार जानना चाहते हैं कि "थ्रेसहोल्ड वैल्यू" क्या है, जिस बिंदु पर एएसपी.नेट मानता है कि वर्तमान में इसे निष्पादित करने वाले अनुरोधों की संख्या बहुत अधिक है और फिर वैश्विक एएसपी.NET अनुरोध कतार में अनुरोधों को कतारबद्ध करना शुरू कर देता है?

मुझे लगता है कि यह थ्रेसहोल्ड अधिकतम संख्या में कार्यकर्ता धागे की कॉन्फ़िगरेशन पर निर्भर करेगा, लेकिन कुछ सूत्र हो सकते हैं जिसके आधार पर एएसपी.नेट निर्धारित करेगा कि समवर्ती निष्पादन अनुरोधों की संख्या बहुत अधिक है और अनुरोधों को कतार में शुरू करना शुरू होता है एएसपी.NET वैश्विक अनुरोध कतार। यह सूत्र क्या हो सकता है? या यह सेटिंग विन्यास योग्य है?


अद्यतन
मैं फिर से लेख के माध्यम से पढ़ सकते हैं और टिप्पणी वर्गों में मैं इस पाया: आईआईएस 6 पर और आईआईएस 7 क्लासिक मोड में

1), प्रत्येक आवेदन (AppDomain) में एक कतार है जिसका उपयोग यह कार्यकर्ता धागे की उपलब्धता को बनाए रखने के लिए करता है। इस कतार में अनुरोधों की संख्या बढ़ जाती है यदि उपलब्ध वर्कर थ्रेड की संख्या httpRuntime minFreeThreads द्वारा निर्दिष्ट सीमा से नीचे आती है। जब httpRuntime appRequestQueueLimit द्वारा निर्दिष्ट सीमा पार हो गई है, तो अनुरोध को 503 स्थिति कोड से खारिज कर दिया गया है और क्लाइंट को "सर्वर बहुत व्यस्त" संदेश के साथ HttpException प्राप्त होता है। एएसपी.NET प्रदर्शन काउंटर, "एप्लिकेशन कतार में अनुरोध" भी है, इंगित करता है कि कतार में कितने अनुरोध हैं। हां, सीएलआर थ्रेड पूल .NET थ्रेडपूल क्लास द्वारा खुलासा किया गया है।

2) अनुरोध QueueLimit खराब नाम दिया गया है। यह वास्तव में अधिकतम अनुरोधों को सीमित करता है जिन्हें ASP.NET द्वारा समवर्ती रूप से सर्विस किया जा सकता है। इसमें दोनों अनुरोध शामिल हैं जो कतारबद्ध हैं और निष्पादन के अनुरोध हैं। यदि "अनुरोध वर्तमान" प्रदर्शन काउंटर requestQueueLimit से अधिक है, नए आने वाले अनुरोध को 503 स्थिति कोड से खारिज कर दिया जाएगा।

तो अनिवार्य रूप से requestQueueLimit अनुरोध करता है कि पंक्तिबद्ध कर रहे हैं की संख्या (मैं इसे अनुरोधों की संख्या आवेदन कतारों के साथ साथ वैश्विक ASP.Net अनुरोध कतार प्लस वर्तमान में क्रियान्वित अनुरोधों की संख्या में पंक्तिबद्ध योग होगा संभालने हूँ) को सीमित करता है और निष्पादित कर रहे हैं। हालांकि यह मूल प्रश्न का उत्तर नहीं देता है, यह इस बारे में जानकारी प्रदान करता है कि जब हम समवर्ती अनुरोध/उच्च विलंबता अनुरोधों की उच्च संख्या के कारण 503 सर्वर व्यस्त त्रुटि प्राप्त कर सकते हैं। (अपडेट 2 की जाँच करें)


अद्यतन 2 समझ में मेरे हिस्से में एक गलती थी। मैंने आईआईएस 6 और आईआईएस 7 के लिए विवरणों को मिश्रित किया था।
अनिवार्य रूप से जब एएसपी.NET एकीकृत मोड में आईआईएस 7.5 और 7.0 पर होस्ट किया गया है, तो एप्लिकेशन-स्तरीय कतार अब मौजूद नहीं हैं, एएसपी.नेट वैश्विक अनुरोध कतार को बनाए रखता है।
तो आईआईएस 7/7.5 वैश्विक अनुरोध कतार में अनुरोध कतार शुरू कर देगा यदि निष्पादन अनुरोधों की संख्या उच्च मानी जाती है। प्रश्न अधिक करने के लिए आईआईएस 7/7.5 के बजाय 6.

जहाँ तक IIS 6.0 का संबंध है पर लागू होता है, कोई वैश्विक ASP.NET अनुरोध कतार वहाँ है, लेकिन निम्न सत्य है:
1. एएसपी। नेट आईआईएस आईओ थ्रेड से अनुरोधों को उठाता है और आईआईएस आईओ थ्रेड
पर पोस्ट "HSE_STATUS_PENDING" पोस्ट करता है 2. अनुरोध सीएलआर वर्कर थ्रेड
पर सौंपे जाते हैं 3. यदि अनुरोध उच्च विलंबता के हैं और सभी धागे पर कब्जा कर लिया गया है (थ्रेड गिनती httpRuntime.minFreeThreads तक पहुंचती है), तो अनुरोध एप्लिकेशन स्तर अनुरोध कतार में पोस्ट किए जाते हैं (यह कतार प्रति AppDomain है)
4. इसके अलावा एएसपी.नेट एक नए अनुरोध को स्वीकार करने से पहले अनुरोध किए गए अनुरोधों की संख्या और वर्तमान में निष्पादन की जांच करता है। यदि यह संख्या processModel.requestQueueLimit द्वारा निर्दिष्ट मान से अधिक है तो आने वाले अनुरोधों को 503 सर्वर व्यस्त त्रुटि के साथ खारिज कर दिया जाएगा।

+0

मैंने जो प्रश्न जोड़े हैं, वे आईआईएस 7/7.5 के लिए संभावित रूप से कम प्रासंगिक प्रश्न बना चुके हैं। और अपडेट आईआईएस 6.0 – Ngm

+0

के बारे में उत्तर प्रदान करते हैं जो लेख आपने लिंक किया है वह कहता है कि थ्रेसहोल्ड MaxConcurrentRequestsPerCPU द्वारा निर्धारित किया जाता है। क्या कोई कारण है कि आपको विश्वास नहीं है कि यह मामला है? – RandomEngy

उत्तर

2

This article सेटिंग्स को थोड़ा बेहतर समझने में मदद कर सकता है।

minFreeThreads: यह सेटिंग कार्यकर्ता प्रक्रिया द्वारा किया जाता है सभी आने वाले अनुरोधों को क़तार में अगर थ्रेड पूल में उपलब्ध थ्रेड की संख्या इस सेटिंग के लिए मूल्य से नीचे गिर जाता है। यह सेटिंग प्रभावी रूप से उन अनुरोधों की संख्या को सीमित करती है जो maxWorkerThreads minFreeThreads पर एक साथ चल सकते हैं। सीपीयू के 88 * # में minFreeThreads सेट करें। यह समवर्ती अनुरोधों की संख्या 12 तक सीमित करता है (मानते हैं कि maxWorkerThreads 100 है)।

संपादित करें:

इस SO post में, थॉमस और अधिक विस्तार और अनुरोध एकीकृत पाइप लाइन में से निपटने के उदाहरण प्रदान करता है। अतिरिक्त स्पष्टीकरण के लिए उत्तर पर टिप्पणियां पढ़ना सुनिश्चित करें।

एक देशी कॉलबैक (webengine.dll में) CLR कार्यकर्ता धागे पर अनुरोध, हम तुलना maxConcurrentRequestsPerCPU * CPUCount सक्रिय अनुरोध कुल ऊपर उठाता है।यदि हमने सीमा पार कर ली है, तो वैश्विक कतार (मूल कोड) में अनुरोध डाला गया है। अन्यथा, इसे निष्पादित किया जाएगा। यदि यह कतारबद्ध था, तो सक्रिय अनुरोधों में से एक पूर्ण होने पर इसे हटा दिया जाएगा।

+0

हां, यह आईआईएस 6.0 में करता है। मैंने यह भी सवाल उठाया: यदि अनुरोध उच्च विलंबता के हैं और सभी धागे पर कब्जा कर लिया गया है (थ्रेड गिनती httpRuntime.minFreeThreads तक पहुंचती है), तो अनुरोध आवेदन स्तर अनुरोध कतार में पोस्ट किए जाते हैं (यह कतार प्रति AppDomain है) – Ngm

+0

आप ठीक है, जो केवल क्लासिक ऐप पूल पर लागू होता है। – ulty4life

संबंधित मुद्दे