2009-09-17 18 views
13

मैं मैं आईआईएस (iisreset) को पुनः आरंभ जब Windows 2008ASP.NET अनुप्रयोग - बहुत धीमी गति से स्टार्टअप iisreset

पर IIS7 के तहत चल रहा है, तो एक पेज मारा एक ASP.NET 3.5 वेबसाइट है, प्रारंभिक स्टार्टअप के बाद वास्तव में धीमा है।

मैं प्रोसेस एक्सप्लोरर में निम्नलिखित गतिविधि देखें:

  • w3wp.exe spawns, लेकिन के बारे में 60 सेकंड के
  • अंत के लिए 0% सीपीयू गतिविधि से पता चलता, w3wp.exe के लिए 50% सीपीयू को जाता है लगभग 5 सेकंड और फिर पृष्ठ भार।

मुझे इस समय के दौरान CPU का उपयोग करके कोई अन्य प्रक्रिया नहीं दिखाई देती है। यह मूल रूप से बस लटकता है।

उस समय के दौरान क्या चल रहा है? मैं इस समय क्या ले रहा हूं इसे ट्रैक कर सकता हूं?

उत्तर

4

मैंने पाया कि नेटवर्क अंत में फ्रंट एंड वेब सर्वर से प्रारंभिक कनेक्शन बनाने में नेटवर्क देरी हुई थी।

यह समस्या विंडोज 2008 और हमारे विशिष्ट नेटवर्क हार्डवेयर के लिए विशिष्ट थी।

4

आईएल को जस्ट-इन-टाइम कंपाइलर द्वारा मशीन मूल कोड (असेंबली) में परिवर्तित किया जा रहा है और आप सभी जादू होने के दौरान प्रतीक्षा कर सकते हैं।

जब प्रबंधित कोड के लिए स्रोत कोड संकलन, संकलक माइक्रोसॉफ्ट मध्यवर्ती भाषा (MSIL) में स्रोत अनुवाद करता है। यह निर्देशों का सीपीयू-स्वतंत्र सेट है जो कुशलतापूर्वक देशी कोड में परिवर्तित किया जा सकता है। माइक्रोसॉफ्ट इंटरमीडिएट भाषा (एमएसआईएल) एक अनुवाद है कंपाइलर्स के आउटपुट के रूप में। यह बस-इन-टाइम (जेआईटी) कंपाइलर में इनपुट है। सामान्य भाषा रनटाइम में एमआईआईएल के रूपांतरण के लिए देशी कोड के लिए एक जेआईटी कंपाइलर शामिल है।

इससे पहले कि माइक्रोसॉफ्ट मध्यवर्ती भाषा (MSIL) यह क्रियान्वित किया जा सकता, .नेट फ्रेमवर्क जस्ट-इन-समय (JIT) संकलक द्वारा देशी कोड में बदला होना चाहिए। यह सीपीयू-विशिष्ट कोड है जो उसी कंप्यूटर आर्किटेक्चर पर जेआईटी कंपाइलर के रूप में चलता है। MSIL को पोर्टेबल निष्पादन योग्य (पीई) फ़ाइल में देशी कोड में कनवर्ट करने के लिए समय और स्मृति का उपयोग करने के बजाय। यह एमएसआईएल को निष्पादित करते समय आवश्यकतानुसार परिवर्तित करता है, फिर परिणामी मूल कोड कैश करता है ताकि किसी भी कॉल के लिए पहुंच योग्य हो।

source

+0

यदि यह JIT संकलन था, मैं Csc.exe देख नहीं होगा:

संकल्प वेब सर्वर पर निम्न निष्क्रिय करने के लिए था प्रक्रिया एक्सप्लोरर में? मुझे 60 सेकंड प्रतीक्षा के दौरान csc.exe चल रहा नहीं है। – frankadelic

+0

@ फ्रैंकडेलिक csc.exe सी # कंपाइलर है। जेआईटी .NET का हिस्सा है और क्यों सी # चल रही मशीनों पर .NET को स्थापित करने की आवश्यकता है। –

+0

चाहे वह सीएससी या जेआईटी था, आप सीपीयू उपयोग देखेंगे। –

4

मध्यवर्ती भाषा + JIT संकलन में asp.Net पृष्ठों के संकलन Thats - यह केवल पहली बार पृष्ठ लोड होता है होता है। (http://msdn.microsoft.com/en-us/library/ms366723.aspx देखें)

यदि यह वास्तव में आपको परेशान करता है तो आप इसे अपनी साइट को पूर्व-संकलित करके रोक सकते हैं।

संपादित करें: बस प्रश्न को फिर से पढ़ें - 60 सेकंड बहुत लंबा है, और आप उस समय के दौरान कुछ प्रोसेसर गतिविधि देखने की उम्मीद करेंगे।सिस्टम और एप्लिकेशन गंतव्यों में त्रुटियों/संदेशों के लिए EventLog देखें। इस 60 सेकंड के दौरान w3wp प्रक्रिया के क्रैश डंप को बनाने का प्रयास करें - एक मौका है कि आप कुछ कॉल स्टैक को देखकर क्या कर सकते हैं।

यदि प्रत्येक बार 60 सेकंड लेता है तो इसकी संभावना है कि यह कुछ समय के लिए प्रतीक्षा कर रहा है - 60 सेकंड एक अच्छा दौर संख्या है। सुनिश्चित करें कि उसके पास डोमेन नियंत्रकों आदि के लिए उचित कनेक्शन हैं ...

(यदि कुछ आईआईएस नैदानिक ​​उपकरण हैं जो बेहतर काम करेंगे तो मुझे डर है कि मैं उनसे अवगत नहीं हूं, यह प्रश्न हो सकता है सर्वरफॉल्ट के लिए अधिक उपयुक्त, उपरोक्त समस्या निवारण के लिए एक और अधिक डेवलपर-आश दृष्टिकोण है: -पी)

+0

जैसा कि अन्य टिप्पणियों में उल्लिखित है - मुझे इस देरी के दौरान चल रहे किसी भी csc.exe को नहीं दिख रहा है। – frankadelic

1

यह टोपी जेआईटी संकलन के साथ कुछ भी नहीं करने के लिए कुछ भी नहीं है। सामान्य सी # कंपाइलर आपके कोड को फ़ाइलों (.aspx.cs) के पीछे इंटरमीडिएट भाषा में स्टार्टअप पर एक असेंबली में संकलित करता है यदि यह असेंबली मौजूद नहीं है या कोड फाइलें बदल गई हैं। आपकी वेबसाइट असेंबली आपकी वेबसाइट के "बिन" फ़ोल्डर में स्थित है।

असल में जेआईटी संकलन इसके बाद होता है, लेकिन यह बहुत तेज़ है और इसमें कई मिनट लगेंगे। जेआईटी संकलन एक .NET अनुप्रयोग के प्रत्येक स्टार्टअप पर होता है और इसमें दृश्य सेकंड से अधिक समय नहीं लगेगा।

यदि आप पहले से संकलित वेबसाइट असेंबली (YourWebsite.dll) को बिन फ़ोल्डर में तैनात करते हैं तो आप अपनी वेबसाइट की प्रतिलिपि से बच सकते हैं। केवल एएसपीएक्स फाइलों को तैनात करना और फाइलों (aspx.cs) फ़ाइलों के पीछे कोड छोड़ना भी संभव है।

+0

दरअसल, एक पूर्व संकलित साइट के साथ भी, .aspx, .ascx, आदि को सी # कोड में संकलित किया गया है, संकलित किया गया है और फिर JIT'd भी है। इसलिए पहली बार एएसपी.NET ऐप को गर्म करते समय बहुत सारी गतिविधियां होती हैं। – Kev

2

60 सेकंड से अधिक तेज मछली पकड़ता है। यह देखने के लिए test.html पृष्ठ चलाने का प्रयास करें कि कितना समय लगता है। इससे आईआईएस 7 की भूमिका अलग हो जाएगी।

फिर अस्थायी रूप से अपने web.config, global.asax और एप्लिकेशन फ़ोल्डरों का नाम बदलें और test.aspx पृष्ठ (बहुत सरल पृष्ठ) आज़माएं। वह एएसपी.नेट को अलग करेगा।

यदि वे दोनों तेज़ हैं (यानी लगभग 10 सेकंड), तो यह आपका आवेदन है। लेकिन, अगर या तो धीमा हो तो एप्लिकेशन और सर्वर के साथ कुछ भी नहीं।

+0

परीक्षण HTML पृष्ठ iisreset के बाद लगभग 2 सेकंड ले लिया। यदि आईआईएस चल रहा था और मैं web.config बदलता हूं, तो परीक्षण एएसपीएक्स पेज लोड करने में 3 सेकंड लगते हैं। – frankadelic

+3

ऐसा लगता है जैसे आईआईएस और एएसपी.नेट अच्छी तरह से कर रहे हैं। यह ऐप में कुछ होना चाहिए जो इसका कारण बन रहा है। यदि यह पहले लोड पर केवल धीमा है तो यह मूल कोड में वार्तालाप है। क्या आपके पास एक विशाल परियोजना है? मैं आपके प्रोजेक्ट प्रकार और आकार की समीक्षा करूंगा और सर्वर पर अपलोड करने से पहले इसे भागों में विभाजित करने या पूर्व-संकलन के बारे में देखूंगा। –

6

हमें एक ही समस्या थी और यह हस्ताक्षर प्रमाणपत्रों को रद्द करने के लिए विंडोज़ टाइमिंग आउट हो गया। यह देखने के लिए जांचें कि आपका सर्वर कहीं कॉल करने का प्रयास कर रहा है (उदा। Crl.microsoft.com)। शायद आपके पास प्रॉक्सी सेटिंग गलत है? या रास्ते में एक फ़ायरवॉल? हमने अंततः निर्धारित किया कि हमारे पास सर्वर पर पर्याप्त नियंत्रण था और वह 'घर पर कॉल' नहीं करना चाहता था, इसलिए हमने बस चेक को अक्षम कर दिया। आप इसे .NET 2.0 SP1 और बाद में machine.config में जोड़कर कर सकते हैं।

<runtime> <generatePublisherEvidence enabled="false"/> </runtime> 

मुझे यकीन नहीं है कि क्या आप इसे अपने app.config/web.config में डाल सकते हैं।

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