सवाल यह सुनिश्चित करने के लिए मुझे क्या करना चाहिए कि आईआईएस मेरे आवेदन को रीसायकल नहीं करता है?


मेरे पास आईआईएस में होस्ट किया गया डब्ल्यूसीएफ सेवा ऐप है। स्टार्टअप पर, यह स्थानीय कैश के रूप में उपयोग करने के लिए वास्तव में महंगा (समय और सीपीयू के मामले में) संसाधन चलाता है और प्राप्त करता है।

दुर्भाग्य से, आईआईएस काफी नियमित आधार पर प्रक्रिया को रीसायकल करने लगता है। इसलिए मैं यह सुनिश्चित करने के लिए एप्लिकेशन पूल पर सेटिंग्स को बदलने की कोशिश कर रहा हूं कि आईआईएस एप्लिकेशन को रीसायकल नहीं करता है। अब तक, मैंने निम्नलिखित को बदल दिया है:

  • सीपीयू के तहत 5 से 0 तक अंतराल सीमित करें।
  • 20 से 0 तक प्रक्रिया मॉडल के तहत निष्क्रिय समय-बाहर।
  • 1740 से 0 तक रीसाइक्लिंग के तहत नियमित समय अंतराल।

क्या यह पर्याप्त होगा? और मेरे पास बदले गए आइटमों के बारे में विशिष्ट प्रश्न हैं:

  1. सीपीयू के तहत सीमा अंतराल सेटिंग क्या विशेष रूप से करता है? क्या इसका मतलब यह है कि यदि कोई निश्चित CPU उपयोग पार हो गया है, तो एप्लिकेशन पूल का पुनर्नवीनीकरण किया जाएगा?
  2. वास्तव में "पुनर्नवीनीकरण" का क्या अर्थ है? क्या आवेदन पूरी तरह से टूट गया है और फिर से शुरू हुआ है?
  3. "वर्कर प्रोसेस शटडाउन" और "एप्लिकेशन पूल रीसाइक्लिंग" के बीच क्या अंतर है? कार्यकर्ता प्रक्रिया को बंद करने के बारे में प्रोसेस मॉडल वार्ता के तहत निष्क्रिय टाइम-आउट के लिए प्रलेखन। जबकि आवेदन पूल रीसाइक्लिंग के बारे में रीसाइक्लिंग बात के तहत नियमित समय अंतराल के लिए दस्तावेज़। मैं दोनों के बीच अंतर नहीं है। मैंने सोचा कि w3wp.exe कार्यकर्ता प्रक्रिया है जो एप्लिकेशन पूल चलाती है। क्या कोई दोनों के बीच आवेदन के अंतर को समझा सकता है?

आईआईएस 7 और आईआईएस 7.5 टैग होने का कारण यह है कि ऐप दोनों में भाग लेगा और उम्मीद है कि संस्करण संस्करणों के बीच समान हैं।

संदर्भ के लिए छवि: enter image description here


70
2017-11-22 23:29


मूल


आईआईएस के लिए सेटिंग्स के साथ आपको ऊपर स्क्रीनशॉट कहां मिला? - Andrew William Ross


जवाब:


पुनर्चक्रण

रीसाइक्लिंग आमतौर पर * जहां आईआईएस आपके आवेदन के लिए एक कंटेनर के रूप में एक नई प्रक्रिया शुरू करता है, और उसके बाद बूढ़ा व्यक्ति को शटडाउनटाइमलिमिट को मारने से पहले अपने स्वयं के संस्करण से दूर जाने देता है।

* - आमतौर पर: DisallowOverlappingRotation / "ओवरलैप्ड रीसायकल अक्षम करें" सेटिंग देखें

यह है हानिकारक, उसमें मूल प्रक्रिया और इसकी सभी राज्य जानकारी छोड़ दी जाती है। आउट-ऑफ-प्रोसेस सत्र स्थिति का उपयोग करना (उदाहरण के लिए, स्टेट सर्वर या डेटाबेस, या यहां तक ​​कि एक कुकी यदि आपका राज्य छोटा है) तो आप इसके आसपास काम करने की अनुमति दे सकते हैं।

लेकिन यह डिफ़ॉल्ट रूप से है ओवरलैप - जिसका मतलब है कि आउटेज की अवधि कम हो जाती है क्योंकि नई प्रक्रिया शुरू होती है और अनुरोध कतार में लगाया जाता है, इससे पहले कि पुराने व्यक्ति को बताया गया हो "आपके पास [शटडाउनटाइमलिमिट] सेकंड दूर जाने के लिए हैं। कृपया पालन करें।"

सेटिंग्स

आपके प्रश्न के लिए: उस पृष्ठ पर सभी सेटिंग्स किसी भी तरह से रीसाइक्लिंग नियंत्रण। "शटडाउन" को "सक्रिय रीसाइक्लिंग" के रूप में वर्णित किया जा सकता है - जहां प्रक्रिया स्वयं ही जाने का समय तय करती है, और व्यवस्थित ढंग से बाहर निकलती है।

प्रतिक्रियाशील रीसाइक्लिंग वह जगह है जहां डब्ल्यूएएस एक समस्या का पता लगाता है और प्रक्रिया को गोली मारता है (उपयुक्त प्रतिस्थापन W3WP स्थापित करने के बाद)।

अब, यहां कुछ चीजें हैं जो एक रूप या किसी अन्य के रीसाइक्लिंग का कारण बन सकती हैं:

  • एक आईएसएपीआई यह अस्वास्थ्यकर निर्णय लेता है
  • कोई मॉड्यूल क्रैशिंग
  • निष्क्रिय समय
  • सीपीयू सीमित
  • ऐप पूल गुण समायोजित करना
    • तुम्हारी मां के रूप में हो सकता है एक बिंदु पर चिल्लाया है: "रुको उठा उस पर, या यह कभी बेहतर नहीं होगा! "
  • "पिंग" विफलता * वास्तव में प्रति से पिंग नहीं कर रही है, क्योंकि यह एक नामित पाइप का उपयोग करता है - अधिक "जीवन का पता लगाने"
  • उपरोक्त स्क्रीनशॉट में सभी सेटिंग्स

क्या करें:

आम तौर पर:

  • अक्षम निष्क्रिय समय समाप्ति। निष्क्रियता के 20 मिनट = उछाल! अगले आने वाले अनुरोध पर नई प्रक्रिया। इसे शून्य पर सेट करें।

  • अक्षम नियमित समय अंतराल - 2 9 घंटे के डिफॉल्ट को विभिन्न पार्टियों द्वारा "पागल", "कष्टप्रद" और "चालाक" के रूप में वर्णित किया गया है। असल में, उनमें से केवल दो ही सत्य हैं।

  • वैकल्पिक रूप से चालू करो DisallowRotationOnConfigChange (ऊपर, कॉन्फ़िगरेशन परिवर्तनों के लिए Reycling अक्षम करें) यदि आप इसके साथ खेलना बंद नहीं कर सकते हैं - इससे आपको बिना किसी एप पूल सेटिंग को बदलने की अनुमति मिलती है, इसके बिना तुरंत उस कार्यकर्ता प्रक्रियाओं को संकेत मिलता है जिसे इसे मारने की आवश्यकता होती है। सेटिंग्स को प्रभावी होने के लिए आपको मैन्युअल रूप से ऐप पूल रीसायकल करने की आवश्यकता है, जो आपको सेटिंग्स को पूर्व-सेट करने देता है और फिर अपनी रीसायकल प्रक्रिया के माध्यम से उन्हें लागू करने के लिए एक परिवर्तन विंडो का उपयोग करता है।

  • एक सामान्य सिद्धांत के रूप में, छोड़ना पिंग सक्षम। यह आपकी सुरक्षा नेट है। मैंने लोगों को इसे बंद कर दिया है, और फिर साइट कभी-कभी अनिश्चित काल तक लटकती है, जिससे आतंक का कारण बनता है ... इसलिए यदि सेटिंग आपके स्पष्ट रूप से बहुत धीमे-से-प्रतिक्रिया वाले ऐप के लिए बहुत आक्रामक हैं, तो उन्हें थोड़ा सा पीछे छोड़ दें और देखें कि इसे बंद करने के बजाय आपको क्या मिलता है। (जब तक आपको अपनी निगरानी प्रक्रिया के माध्यम से लटका W3WPs के लिए ऑटो-क्रैश-मोड डंपिंग सेट नहीं किया जाता है)

एक अच्छी तरह से व्यवहार की प्रक्रिया हमेशा के लिए जीने के लिए पर्याप्त है। यदि यह मर जाता है, तो निश्चित रूप से, इसे प्रतिस्थापित कर दिया जाएगा। यदि यह लटकता है, तो पिंगिंग को इसे उठाया जाना चाहिए और एक नया व्यक्ति 2 मिनट के भीतर शुरू होना चाहिए (डिफ़ॉल्ट रूप से; सबसे खराब केस कैल्क होना चाहिए: तक पिंग आवृत्ति + पिंग मध्यांतर + स्टार्टअप समय सीमा अनुरोध से पहले फिर से काम करना शुरू करें)।

सीपीयू सीमित नहीं है सामान्य रूप से दिलचस्प है, क्योंकि डिफ़ॉल्ट रूप से यह बंद हो गया है, और यह भी कुछ भी करने के लिए कॉन्फ़िगर किया गया है; अगर यह प्रक्रिया को मारने के लिए कॉन्फ़िगर किया गया था, तो निश्चित रूप से, यह एक रीसाइक्लिंग ट्रिगर होगा। इसे छोड़ दो। आईआईएस 8.x के लिए नोट, सीपीयू थ्रॉटलिंग भी एक विकल्प बन जाता है।

एक (आईआईएस) AppPool एक (.Net) AppDomain नहीं है (लेकिन इसमें एक / कुछ हो सकता है)

लेकिन ... फिर हम नेट भूमि, और ऐपडोमेन रीसाइक्लिंग में आते हैं, जो राज्य की हानि भी पैदा कर सकता है। (देख: https://blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/)

लघु संस्करण, आप अपने सामग्री फ़ोल्डर में एक वेब.कॉन्फिग फ़ाइल को स्पर्श करके (फिर पिकिंग के साथ!), या उस फ़ोल्डर में एक फ़ोल्डर बनाकर, या एएसपीएक्स फ़ाइल, या .. अन्य चीजें ... और यह है के बारे में एक ऐप पूल रीसायकल के रूप में विनाशकारी के रूप में, ऋणमूल-कोड स्टार्टअप लागत (यह पूरी तरह से एक प्रबंधित कोड (.Net) अवधारणा है, इसलिए केवल प्रबंधित कोड सामान यहां होता है)।

एंटीवायरस इसे भी ट्रिगर कर सकता है क्योंकि यह web.config फ़ाइलों को स्कैन करता है, जिससे परिवर्तन अधिसूचना होती है, जिससे ....


92
2017-11-23 05:07





कृपया इसे जांचो,

हम अपने आवेदन पूल रीसायकल क्यों करते हैं?

यदि आप कारण खोजने के लिए वेब ब्राउज़ करते हैं कि एप्लिकेशन पूल स्वचालित रूप से समय-समय पर रीसायकल करने के लिए क्यों कॉन्फ़िगर किए जाते हैं, आपको उचित उत्तर खोजने के लिए कड़ी मेहनत की जाएगी जो स्मृति समस्याओं से संबंधित नहीं है। ऐसा लगता है कि आम तौर पर समुदाय ने इस तथ्य को स्वीकार किया है कि हमारे वेब अनुप्रयोग (या आईआईएस में होस्ट की गई सेवा परतों) को स्मृति समस्याओं से बचने के लिए पुनर्नवीनीकरण की आवश्यकता होगी।

मैं हमेशा राय का रहा हूं यदि आपके कोड को सही ढंग से काम करने के लिए आवधिक पुनरारंभ की आवश्यकता है, तो कुछ स्पष्ट रूप से गलत है। एक बग है अपने कोड में कहीं और आपको इसे ठीक करने की आवश्यकता है, कभी-कभी समस्या को दूर करने के लिए प्रक्रिया को फिर से शुरू करने की बजाय।

वास्तव में अधिक ध्यान केंद्रित करने की आवश्यकता है स्मृति प्रबंधन .NET में और यह सुनिश्चित करने पर कि हमारे अनुप्रयोग बिना किसी समस्या के चलते रहें।


2
2017-11-19 08:03



एक कारण यह था कि .NET 'बड़ी वस्तुओं' (आमतौर पर 85 के या बड़े या कुछ) के लिए अलग ढेर का उपयोग करता है, जो कचरा संग्रह होने पर संकलित नहीं होता है (हालांकि .NET 4.5.1 में मुझे लगता है कि उन्होंने LOH को कॉम्पैक्ट करने के लिए विकल्प जोड़ा है), और सर्वर पक्ष पर एचटीएमएल प्रस्तुत करते समय एएसपी.नेट में यह 85 के एचटीएमएल (विशेष रूप से टेबल और ग्रिड जैसी दोहराई गई सामग्री के लिए) देखने के लिए असामान्य नहीं है और यह एचटीएमएल मूल रूप से एक बिंदु पर सर्वर पर एक विशाल स्ट्रिंग ऑब्जेक्ट है, और यदि यह योग्य है एक बड़ी वस्तु, यह बड़ी वस्तु ढेर विखंडन में योगदान देती है, जिसके परिणामस्वरुप आउटऑफमेमरी अपवाद होता है, इसलिए रीसाइक्लिंग - nothingisnecessary


ओपी परिदृश्य (स्टार्टअप / गर्म अप पर लंबी शुरुआत) के आधार पर, जांच करने के लिए एक और चीज है स्टार्टअप समय सीमा (सेकेंड) जिसमें 90 सेकंड का डिफ़ॉल्ट मान है। यदि प्रारंभिक समय सीमा से अधिक प्रारंभ होता है, तो कार्यकर्ता प्रक्रिया को समाप्त किया जा सकता है।


0
2017-08-29 07:59