2014-08-29 6 views
5

को तैनात करने के बाद AppDomains को अनलोड नहीं करता है जब हम अपने वेब एप्लिकेशन को तैनात करते हैं तो हम सभी कोड को एक नई निर्देशिका में कॉपी करते हैं और फिर उस नई निर्देशिका को iis इंगित करते हैं। जब हम ऐसा करते हैं तो एपडोमेन की संख्या बढ़ जाती है लेकिन कभी कम नहीं होती है। इसके अलावा, हमारी एप्लिकेशन_इंड घटना कभी भी आग लगती नहीं है।एएसपी.नेट वेब एप्लिकेशन

कुछ अज्ञात समय के लिए, जबकि ऐपडोमेन्स के दोनों सेट अभी भी परफॉर्म द्वारा रिपोर्ट किए जाते हैं, सिस्टम बहुत खराब प्रदर्शन करता है जबकि जीसी स्पाइक्स में% समय 100% तक होता है। आखिर में ऐप को आसानी से चलने के लिए ऐप पूल रीसायकल करता है।

जानकारी का अतिरिक्त टुकड़ा: एपडोमेन सूचीबद्ध करना मेरे देव मशीन पर 2 दिखाता है, लेकिन लाइव सर्वर पर 4 रन ... हमारे पास पूल में एक एप्लिकेशन चल रहा है, इसका मतलब है कि हम जिस लाइब्रेरी का उपयोग कर रहे हैं वह बना रहा है अनुप्रयोग डोमेन।

क्या हो रहा है डीबग करने का प्रयास करने के लिए मुझे क्या करना चाहिए? ऐप डोमेन को उतारने से क्या रोक देगा?

अद्यतन 9/3/2014

कुछ और अधिक विस्तार लॉग जानकारी यह समस्या की तरह लग रहा प्राप्त करने के बाद नहीं पुराने एप्लिकेशन को चारों ओर रहने डोमेन है, यह पुनः आरंभ करने के दौरान बनाए गए नए appdomains है। आवेदन के बजाय एक नया उदाहरण शुरू करने के बजाय, यह दो शुरू होता है। कभी-कभी हमें पुराने उदाहरण से एप्लिकेशन_एंड मिलता है, कभी-कभी हम नहीं करते हैं।

अद्यतन 9/4/2014

दोनों बातें हो रही हैं। प्रक्रिया एक्सप्लोरर का उपयोग करके मैं उन मशीनों में से एक पर देख सकता हूं जो पुराना ऐप डोमेन अभी भी है और एक नया शुरू हो गया है। दूसरी मशीन पर केवल 2 ऐप डोमेन थे लेकिन उनके अनुक्रमिक आईडी में एक अंतर था। तो दो उदाहरण शुरू हुए (हमें ऐप स्टार्ट से एक लॉग संदेश भी मिलता है), उनमें से एक लगभग तुरंत ऐप डोमेन छोड़कर लगभग तुरंत मर गया।

+0

क्या आप किसी भी मौके पर एएसपी.NET कैशिंग का उपयोग कर एक बेदखल योजना के साथ कर रहे हैं जो कैश को समाप्त होने पर पुनः लोड करता है? –

+0

हम एएसपी.NET एप्लिकेशन कैश का उपयोग करते हैं। हम उपयोगकर्ताओं के सत्र टाइमआउट के आधार पर रोलिंग समाप्ति के साथ चीजें डालते हैं। हालांकि यह अपने आप पर कुछ भी पुनः लोड नहीं करता है। –

+0

"रोलिंग समाप्ति" से आपका क्या मतलब है? क्या आपका मतलब है कि आप समाप्ति को अपडेट करते हैं? मैं जो पूछ रहा था वह यह है कि कैश मैनेजर –

उत्तर

2

हालांकि मुझे यकीन नहीं है कि यह केवल कारण है कि ऐप एपडोमेन को उतार नहीं रहा था, यह निश्चित रूप से एक कारण है। वास्तविक उत्तर उन चरणों के मुकाबले बहुत कम दिलचस्प है जो मैंने इसे समझने के लिए उपयोग किया था।

  1. मैंने अपने ऐप के खिलाफ 10 धागे में 100 अनुरोधों को बनाने के लिए थोड़ी रूबी लिपि लिखी है (जेएमटर को स्थापित करने से अधिक समय लगेगा)।
  2. स्क्रिप्ट चलाएं और ऐप कॉन्फ़िगरेशन फ़ाइल में कई बार चलने के दौरान परिवर्तन किए। इसमें कुछ मिनट लग गए।
  3. मैंने प्रक्रिया एक्सप्लोरर का उपयोग यह पुष्टि करने के लिए किया था कि वास्तव में प्रक्रिया में 4 ऐप डोमेन लोड किए गए थे।
  4. मैंने procdump भाग लिया और एक डंप फ़ाइल बनाई।
  5. प्रोजेक्ट स्टूडियो में procdump फ़ाइल लोड की गई और "केवल प्रबंधित के साथ डीबग" पर क्लिक किया गया (भले ही मुझे पता नहीं था कि बग प्रबंधित कोड में था या नहीं)
  6. डीबगर कोड की एक पंक्ति पर रुक गया जहां थ्रेड Application_End प्रसंस्करण समाप्त करने के लिए कतार की प्रतीक्षा कर रहा था। चर के मूल्यों को देखकर मैं यह बताने में सक्षम था कि कतार अब वस्तुओं को संसाधित नहीं कर रही थी, लेकिन हम कतार खाली होने तक प्रतीक्षा करने जा रहे थे।
  7. कोड बदल दिया और फिर से प्रक्रिया शुरू की, इस बार वेब कॉन्फ़िगरेशन में मेरे परिवर्तनों से शुरू किए गए सभी ऐप डोमेन अनलोड किए गए थे।
2

एक बात आप की जांच में मदद करने के समस्याओं का निवारण कर सकते हैं:

Process Explorer वास्तव में एक .NET Assemblies टैब जो सभी AppDomains एक प्रक्रिया द्वारा लोड को सूचीबद्ध करता है। नोट: टैब केवल उन प्रक्रियाओं के लिए प्रकट होता है जो .NET Framework का उपयोग करते हैं।

+0

धन्यवाद, चूंकि ऐप डोमेन सूचीबद्ध करने के लिए काम करने वाला कोड लाइव इंस्टेंस प्रोसेस एक्सप्लोरर पर कुछ अजीब कारणों के लिए विफल रहता है, तो मुझे ऐपडोमेन देखने की अनुमति मिली। फिलहाल 4. साझाडोमेन, डिफॉल्टडोमेन, और फिर हमारे आवेदन की तरह दिखने के दो उदाहरण हैं। –

+0

अगर केवल मुझे पता था कि ऐप डोमेन को क्या रख रहा था। –

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