IIS के लिए धीमी प्रारंभिक लोड फिक्सिंग


129

IIS में कम ट्रैफ़िक वेबसाइटों के लिए एक कष्टप्रद विशेषता है जहां यह अप्रयुक्त कार्यकर्ता प्रक्रियाओं को पुन: चक्रित करता है, जिससे साइट के पहले उपयोगकर्ता को बहुत लंबे समय तक देरी (30+ सेकंड) प्राप्त होती है।

मैं समस्या का हल ढूंढ रहा हूं और मुझे ये संभावित समाधान मिल गए हैं।

A. एप्लिकेशन इनिशियलाइज़ेशन प्लगइन का उपयोग करें

B. .NET 4 के साथ ऑटो-स्टार्ट का उपयोग करें

C. निष्क्रिय-समय समाप्त (IIS रीसेट के तहत) अक्षम करें

डी। साइट को रोकना

मुझे आश्चर्य है कि इनमें से कौन सी पसंद की जाती है, और इससे भी महत्वपूर्ण बात यह है कि एक ही समस्या के इतने सारे समाधान क्यों हैं? (मेरा अनुमान है कि वे नहीं हैं, और मैं अभी कुछ ठीक से समझ नहीं पा रहा हूं)।

संपादित करें

प्रदर्शन करने वाली सी मेरी साइट को गर्म रखने के लिए पर्याप्त लगती है, लेकिन मुझे पता चला है कि मेरी साइट की सुस्ती की असली जड़ एंटिटी फ्रेमवर्क के साथ है, जो मुझे पता नहीं लग सकता है कि यह ठंडा क्यों हो रहा है। यह प्रश्न देखें , जिसका दुर्भाग्य से अभी तक उत्तर नहीं दिया गया है!

मुझे अंततः बस अपनी साइट को हिट करने के लिए कभी-कभी एक वार्म अप स्क्रिप्ट बनानी पड़ी, ताकि यह सुनिश्चित हो सके कि यह शीघ्र बने।


हाय दोस्त, क्या सी पर्याप्त प्रदर्शन कर रहा है? क्यों ? क्या हमें केवल इसका उपयोग करने की आवश्यकता है या पुनर्नवीनीकरण को अक्षम करने की आवश्यकता है? मुझे हमेशा लगता है कि दूसरे दिन पहला अनुरोध IIS7.5 का बहुत धीमा है
19

जवाबों:


36

विकल्प ए, बी और डी एक ही श्रेणी में प्रतीत होते हैं क्योंकि वे केवल शुरुआती शुरुआती समय को प्रभावित करते हैं, वे वेबसाइट के वॉर्मअप जैसे कि मेमोरी में पुस्तकालयों का संकलन और लोडिंग करते हैं।

C का उपयोग करते हुए, निष्क्रिय समय-सीमा निर्धारित करते हुए, पर्याप्त होना चाहिए ताकि सर्वर के लिए बाद के अनुरोधों को तेजी से परोसा जाए (ऐप पूल को फिर से शुरू करने में कुछ समय लगता है - सेकंड के क्रम में)।

जहां तक ​​मुझे पता है, टाइमआउट मेमोरी को बचाने के लिए मौजूद है जो उस मशीन पर समानांतर चलने वाली अन्य वेबसाइटों की आवश्यकता हो सकती है। कीमत है कि एक समय धीमा लोड समय।

इस तथ्य के अलावा कि उपयोगकर्ता की निष्क्रियता के मामले में ऐप पूल बंद हो जाता है, ऐप पूल हर 1740 मिनट (29 घंटे) को डिफ़ॉल्ट रूप से रीसायकल भी करेगा।

तकनीक से:

इंटरनेट सूचना सेवा (IIS) एप्लिकेशन पूल को समय-समय पर रिसाइकिल किया जा सकता है ताकि अस्थिर राज्यों से बचा जा सके, जिससे एप्लिकेशन क्रैश, हैंग या मेमोरी लीक हो सकता है।

जब तक ऐप पूल रीसाइक्लिंग पर छोड़ दिया जाता है, तब तक यह पर्याप्त होना चाहिए। लेकिन अगर आप वास्तव में अधिकांश घटकों के लिए शीर्ष पायदान प्रदर्शन चाहते हैं, तो आपको अपने द्वारा उल्लिखित एप्लिकेशन इनिशियलाइज़ेशन मॉड्यूल जैसे कुछ का उपयोग करना चाहिए।


तो क्या आप केवल निष्क्रिय-समय समाप्त करने की सलाह देंगे? क्या इस मुद्दे के साथ लाइन का कारण होगा (मुझे लगता है कि यह एक कारण के लिए है)?
कैविन वॉनडेलेन

3
यह वास्तव में मेरी समस्या को ठीक नहीं करता (मेरा संपादन देखें), लेकिन जब से आपने मेरे मूल प्रश्न का उत्तर दिया, मैंने स्वीकार कर लिया।
कैविन वॉनडेलेन

10

वेब होस्टिंग चुनौती

आपको यह याद रखना होगा कि यदि आप किसी साझा सर्वर पर होस्ट किए गए हैं तो मशीन कॉन्फ़िगरेशन विकल्पों में से कोई भी उपलब्ध नहीं है, क्योंकि हम में से कई (छोटी कंपनियां और व्यक्ति) हैं।

ASP.NET MVC ओवरहेड

मेरी साइट को कम से कम 30 सेकंड का समय लगता है जब इसे 20 मिनट से अधिक नहीं मारा गया है (और वेब ऐप बंद कर दिया गया है)। यह भयानक है।

टेस्ट प्रदर्शन का दूसरा तरीका

यह परीक्षण करने का एक और तरीका है कि यह आपका ASP.NET MVC स्टार्ट अप है या कुछ और। अपनी साइट पर एक सामान्य HTML पेज ड्रॉप करें जहां आप इसे सीधे हिट कर सकते हैं।
यदि यह समस्या ASP.NET MVC से संबंधित है तो वेब पेज शुरू नहीं होने पर भी HTML पेज लगभग तुरंत ही रेंडर हो जाएगा।
इस तरह मैंने पहली बार पहचाना कि समस्या ASP.NET MVC स्टार्टअप में थी। मैंने किसी भी समय एक HTML पृष्ठ लोड किया है और यह तेज़ी से धधक रहा होगा। फिर, उस HTML पेज को हिट करने के बाद, मैं अपने ASP.NET MVC URL में से एक को हिट करूँगा और मुझे क्रोम संदेश "रेडदेव के लिए प्रतीक्षा कर रहा है।" ...

सहायक स्क्रिप्ट के साथ एक और टेस्ट

उसके बाद मैंने एक LINQPad ( अधिक जानकारी के लिए http://linqpad.net देखें ) स्क्रिप्ट लिखी जो हर 8 मिनट में मेरी वेब साइट को हिट करती है (ऐप को अनलोड करने के लिए समय से कम - जो 20 मिनट होनी चाहिए) और मैंने जाने दिया यह घंटों तक चलता है।

जब स्क्रिप्ट चल रही थी तो मैंने अपनी वेब साइट को हिट किया और हर बार मेरी साइट तेजी से ऊपर आ गई। यह मुझे एक अच्छा विचार देता है कि सबसे अधिक संभावना मैं जो मंदी का अनुभव कर रहा था वह ASP.NET MVC स्टार्टअप समय के कारण था।

LinqPad प्राप्त करें और आप निम्न स्क्रिप्ट चला सकते हैं - बस URL को अपने आप से बदल दें और इसे चलने दें और आप इसे आसानी से जांच सकते हैं। सौभाग्य।

नोट : LinqPad में आपको लाइब्रेरी को जोड़ने के लिए F4 को प्रेस करना होगा और System.Net पर एक संदर्भ जोड़ना होगा जो आपके पृष्ठ को पुनः प्राप्त करेगा।

ALSO : सुनिश्चित करें कि आप स्ट्रिंग URL वैरिएबल को उस URL पर इंगित करने के लिए बदलते हैं जो आपके ASP.NET MVC साइट से एक रूट को लोड करेगा ताकि इंजन चले।

System.Timers.Timer webKeepAlive = new System.Timers.Timer();
Int64 counter = 0;
void Main()
{
    webKeepAlive.Interval = 5000;
    webKeepAlive.Elapsed += WebKeepAlive_Elapsed;
    webKeepAlive.Start();
}

private void WebKeepAlive_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    webKeepAlive.Stop();
    try
    {
        // ONLY the first time it retrieves the content it will print the string
        String finalHtml = GetWebContent();
        if (counter < 1)
        {
            Console.WriteLine(finalHtml);
        }
        counter++;
    }
    finally
    {
        webKeepAlive.Interval = 480000; // every 8 minutes
        webKeepAlive.Start();
    }
}

public String GetWebContent()
{
    try
    {
    String URL = "http://YOURURL.COM";
    WebRequest request = WebRequest.Create(URL);
    WebResponse response = request.GetResponse();
    Stream data = response.GetResponseStream();
    string html = String.Empty;
    using (StreamReader sr = new StreamReader(data))
    {
        html = sr.ReadToEnd();
    }
    Console.WriteLine (String.Format("{0} : success",DateTime.Now));
    return html;
    }
    catch (Exception ex)
    {
        Console.WriteLine (String.Format("{0} -- GetWebContent() : {1}",DateTime.Now,ex.Message));
        return "fail";
    }
}

3

अपनी निष्क्रिय वेबसाइट को हिट करने के लिए पिंग सेवा / स्क्रिप्ट लिखना बल्कि जाने का सबसे अच्छा तरीका है क्योंकि आपके पास एक पूर्ण नियंत्रण होगा। आपके द्वारा उल्लिखित अन्य विकल्प उपलब्ध होंगे यदि आपने एक समर्पित होस्टिंग बॉक्स किराए पर लिया है।

एक साझा होस्टिंग स्थान में, वार्मअप स्क्रिप्ट सबसे अच्छा प्रथम स्तर की रक्षा है (स्वयं सहायता सबसे अच्छी मदद है)। यहां एक लेख है जो अपने स्वयं के वेब एप्लिकेशन से यह करने के बारे में विचार साझा करता है


बस इस पुराने धागे को अपडेट किया गया है, अगर कोई उसी की खोज करता है
डेविड चेलिया

2

मैं बी का उपयोग करूंगा क्योंकि कार्यकर्ता प्रक्रिया रीसाइक्लिंग के साथ संयोजन का मतलब है कि रीसाइक्लिंग करते समय केवल एक देरी होगी। यह निष्क्रियता के बाद पहले अनुरोध के जवाब में सामान्य रूप से प्रारंभ से जुड़ी देरी से बचा जाता है। आपको रीसाइक्लिंग के लाभ भी मिलते रहते हैं।


2

साइट को पिंग करने का एक अच्छा विकल्प माइक्रोसॉफ्ट फ्लो का उपयोग करना है, जो प्रति माह 750 "रन" तक मुफ्त है। एक फ्लो बनाना बहुत आसान है जो आपकी साइट को गर्म रखने के लिए हर घंटे हिट करता है। आप अपनी साइट के कई हिट को अलग करने में देरी के साथ एकल प्रवाह बनाकर 750 की उनकी सीमा के आसपास भी काम कर सकते हैं।

https://flow.microsoft.com


1

प्रदर्शन के मुद्दों में मदद करने के बारे में सुझावों के लिए यह लेख देखें। इसमें "कोल्ड स्टार्ट" सेक्शन के तहत स्टार्ट अप से संबंधित दोनों प्रदर्शन मुद्दे शामिल हैं। इसमें से अधिकांश कोई फर्क नहीं पड़ता कि आप किस प्रकार के सर्वर का उपयोग कर रहे हैं, स्थानीय या उत्पादन में।

http://blogs.msdn.com/b/mcsuksoldev/archive/2011/01/19/common-performance-issues-on-asp-net-web-sites.aspx

यदि आवेदन XML (और जिसमें वेब सेवाएँ शामिल हैं) से कुछ भी अलग करता है, तो सुनिश्चित करें कि SGEN डिसेरिज़ेशन में शामिल सभी बायनेरिज़ के विरुद्ध चलाया जाता है और परिणामस्वरूप DLL को ग्लोबल असेंबली कैश (GAC) में रखता है। यह असेंबलियों SGEN द्वारा उपयोग किए जाने वाले सभी क्रमिक वस्तुओं को precompiles के खिलाफ चलाया गया था और परिणामस्वरूप DLL में उन्हें कैश किया गया था। यह डिस्क से शुरुआती फाइलों के डिस्कॉर्लेशन (लोडिंग) और वेब सेवाओं पर शुरुआती कॉल पर भारी समय की बचत दे सकता है। http://msdn.microsoft.com/en-us/library/bk3w6240(VS.80).aspx

यदि किसी भी IIS सर्वर के पास इंटरनेट तक आउटगोइंग एक्सेस नहीं है, तो AuthPicode बायनेरिज़ के लिए सर्टिफिकेशन रेवोडेशन लिस्ट (CRL) को जेनरेटरिग्रिवइन्फ़ेंस = "असत्य" मशीन में जोड़कर बंद कर दें। अन्यथा हर कार्यकर्ता प्रक्रिया स्टार्ट-अप के दौरान 20 से अधिक सेकंड के लिए लटका सकता है, जबकि यह बार बार CRL सूची प्राप्त करने के लिए इंटरनेट से कनेक्ट करने का प्रयास करता है। http://blogs.msdn.com/amolravande/archive/2008/07/20/startup-performance-disable-the-generatepublisherevidence-property.aspx

http://msdn.microsoft.com/en-us/library/bb629393.aspx

सभी विधानसभाओं पर NGEN का उपयोग करने पर विचार करें। हालांकि सावधान उपयोग के बिना यह एक प्रदर्शन का लाभ नहीं देता है। ऐसा इसलिए है क्योंकि प्रत्येक प्रक्रिया द्वारा लोड किए गए सभी बायनेरिज़ के आधार लोड पते को ओवरलैप न करने के लिए बिल्ड समय पर सावधानीपूर्वक सेट किया जाना चाहिए। यदि पता झड़पों के कारण लोड होने पर बायनेरिज़ को रिबूट करना पड़ता है, तो एनजीएन का उपयोग करने के लगभग सभी प्रदर्शन लाभ खो जाएंगे। http://msdn.microsoft.com/en-us/magazine/cc163610.aspx


0

मुझे 4 मिनट की निष्क्रियता के बाद पहले अनुरोध पर लगातार 15 सेकंड की देरी हो रही थी। मेरी समस्या यह थी कि मेरा ऐप SQL सर्वर के लिए Windows एकीकृत प्रमाणीकरण का उपयोग कर रहा था और सेवा प्रोफ़ाइल सर्वर से अलग डोमेन में थी। यह ऐप इनिशियलाइज़ेशन पर IIS से SQL तक क्रॉस-डोमेन प्रमाणीकरण का कारण बना - और यह मेरी देरी का वास्तविक स्रोत था। मैं विंडोज़ प्रमाणीकरण के बजाय SQL लॉगिन का उपयोग करने के लिए बदल गया। देरी तुरंत हो गई थी। मेरे पास अभी भी प्रदर्शन को बेहतर बनाने में मदद करने के लिए सभी ऐप इनिशियलाइज़ेशन सेटिंग्स हैं, लेकिन हो सकता है कि मेरे मामले में उनकी ज़रूरत न हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.