আইআইএসের জন্য ধীর প্রাথমিক লোড ঠিক করা


129

আইআইএসের কম ট্রাফিক ওয়েবসাইটগুলির জন্য একটি বিরক্তিকর বৈশিষ্ট্য রয়েছে যেখানে এটি অব্যবহৃত কর্মী প্রক্রিয়াগুলি পুনর্ব্যবহার করে, কিছুক্ষণ পরে প্রথমে ব্যবহারকারীর পক্ষে একটি দীর্ঘ দীর্ঘ বিলম্ব (30+ সেকেন্ড) পেতে পারে।

আমি সমস্যার সমাধান খুঁজছি এবং আমি এই সম্ভাব্য সমাধানগুলি খুঁজে পেয়েছি।

উ: অ্যাপ্লিকেশন সূচনা প্লাগইনটি ব্যবহার করুন

বি নেট 4 দিয়ে অটো-স্টার্ট ব্যবহার করুন

সি নিষ্ক্রিয়-সময়সীমা অক্ষম করুন (আইআইএস রিসেটের অধীনে)

ডি প্রাকম্পাইল করুন

আমি ভাবছি যেগুলির মধ্যে কোনটি পছন্দনীয় এবং আরও গুরুত্বপূর্ণ, একই সমস্যার এত সমাধান কেন? (আমার অনুমান যে তারা নয়, এবং আমি ঠিক কিছু সঠিকভাবে বুঝতে পারছি না)।

সম্পাদন করা

পারফর্মিং সি আমার সাইটকে উষ্ণ রাখার জন্য যথেষ্ট বলে মনে হয়েছে, তবে আমি আবিষ্কার করেছি যে আমার সাইটের ownিলে .লের আসল মূলটি সত্তা ফ্রেমওয়ার্কের সাথে সম্পর্কিত, এটি কেন ঠান্ডা হয়ে যাচ্ছে তা আমি বুঝতে পারি না। এই প্রশ্নটি দেখুন , যা দুর্ভাগ্যক্রমে এখনও উত্তর দেওয়া হয়নি !

অবশেষে আমার সাইটের মাঝে মাঝে আঘাত করার জন্য এটি একটি দ্রুততর স্ক্রিপ্ট তৈরি করতে হয়েছিল যাতে এটি দ্রুত থেকে যায় তা নিশ্চিত করে।


হাই বন্ধু, সি পারফর্ম করা কি যথেষ্ট? কেন? আমাদের কি কেবল এটি ব্যবহার করতে হবে বা পুনর্ব্যবহারযোগ্য অক্ষম করা দরকার? আমি সর্বদা দ্বিতীয় দিনের প্রথম অনুরোধটি IIS7.5 এর খুব ধীর বোধ করি
কাকমাক

উত্তর:


36

অপশন এ, বি এবং ডি একই বিভাগে উপস্থিত বলে মনে হচ্ছে যেহেতু তারা কেবলমাত্র প্রাথমিক শুরুর সময়কেই প্রভাবিত করে, তারা ওয়েবসাইটটি ওয়ার্মআপ করে যেমন স্মৃতিতে গ্রন্থাগার সংকলন এবং লোড করে।

নিষ্ক্রিয় সময়সীমা নির্ধারণ, সি ব্যবহার করা যথেষ্ট হওয়া উচিত যাতে সার্ভারের পরবর্তী অনুরোধগুলি দ্রুত পরিবেশন করা হয় (অ্যাপ পুলটি পুনরায় চালু করতে কয়েক সেকেন্ডের ক্রম অনুসারে)।

আমি যতদূর জানি, মেমোরিটি সংরক্ষণ করার জন্য টাইমআউট উপস্থিত রয়েছে যা সেই মেশিনে সমান্তরালে চলমান অন্যান্য ওয়েবসাইটের প্রয়োজন হতে পারে। দাম যে এক সময় ধীর লোড সময়।

ব্যবহারকারীর নিষ্ক্রিয়তার ক্ষেত্রে অ্যাপ পুলটি শাটডাউন হওয়ার বিষয়টি ছাড়াও অ্যাপ্লিকেশন পুলটি প্রতি 1740 মিনিট (29 ঘন্টা) ডিফল্টভাবে পুনর্ব্যবহার করবে।

টেকনেট থেকে:

ইন্টারনেট তথ্য পরিষেবাদি (আইআইএস) অ্যাপ্লিকেশন পুলগুলি পর্যায়ক্রমে পুনর্ব্যবহার করা যেতে পারে যাতে অস্থিতিশীল রাজ্যগুলি এড়ানো যায় যা অ্যাপ্লিকেশন ক্র্যাশ, হ্যাং বা মেমরি ফাঁস হতে পারে।

যতক্ষণ অ্যাপ পুল পুনর্ব্যবহার করা বাকি থাকে ততক্ষণ পর্যাপ্ত হওয়া উচিত। তবে আপনি যদি বেশিরভাগ উপাদানগুলির জন্য সত্যই শীর্ষস্থানীয় পারফরম্যান্স চান তবে আপনার উল্লেখ করা অ্যাপ্লিকেশন ইনিশায়ালিয়েশন মডিউলটির মতো কিছু ব্যবহার করা উচিত।


সুতরাং আপনি কি নিষ্ক্রিয় সময়সীমা নিষ্ক্রিয় করার পরামর্শ দিন? এটি কি লাইন ধরে সমস্যার সৃষ্টি করবে (আমি অনুমান করছি যে এটি কোনও কারণেই আছে)?
কেভেন ভনডেলেন

3
এটি আসলে আমার সমস্যাটি সমাধান করে না (আমার সম্পাদনা দেখুন), তবে আপনি আমার মূল প্রশ্নের উত্তর দিয়েছিলেন তাই আমি গ্রহণ করেছি।
কেভেন ভনডেলেন

10

ওয়েব হোস্টিং চ্যালেঞ্জ

আপনাকে মনে রাখতে হবে যে আমাদের মধ্যে অনেকগুলি (ছোট সংস্থাগুলি এবং ব্যক্তি) যেমনটি কোনও শেয়ার্ড সার্ভারে হোস্ট করা থাকে তবে মেশিন কনফিগারেশন বিকল্পগুলির কোনওটিই উপলভ্য নয়।

এএসপি.নেট এমভিসি ওভারহেড

20 মিনিটেরও বেশি সময় না পেরে আমার সাইটটি কমপক্ষে 30 সেকেন্ড সময় নেয় (এবং ওয়েব অ্যাপটি বন্ধ হয়ে গেছে)। এটা ভয়ানক.

পারফরম্যান্স টেস্টের আরেকটি উপায়

এটির অন্য উপায় আছে যদি এটি আপনার ASP.NET এমভিসি শুরু হয় বা অন্য কিছু। আপনার সাইটে এমন একটি সাধারণ HTML পৃষ্ঠা ফেলে দিন যেখানে আপনি এটি সরাসরি আঘাত করতে পারেন।
যদি সমস্যাটি এএসপি.নেট এমভিসি শুরু হওয়ার সাথে সম্পর্কিত হয় তবে ওয়েব অ্যাপ্লিকেশন শুরু না হওয়া সত্ত্বেও HTML পৃষ্ঠাটি প্রায় অবিলম্বে রেন্ডার হবে।
এটিই আমি প্রথম সনাক্ত করেছি যে সমস্যাটি এএসপি.এনইটি এমভিসি শুরুতে ছিল। আমি যে কোনও সময় একটি HTML পৃষ্ঠা লোড করেছি এবং এটি দ্রুত জ্বলন্ত লোড হবে। তারপরে, এইচটিএমএল পৃষ্ঠাটি হিট করার পরে আমি আমার একটি এএসপি.নেট এমভিসি ইউআরএল হিট করব এবং আমি "রেডেভ.উসের জন্য অপেক্ষা ..." ক্রোম বার্তাটি পেয়েছি

সহায়ক স্ক্রিপ্ট সহ আরও একটি পরীক্ষা

এর পরে আমি একটি লিনকিউপ্যাড লিখেছিলাম ( http://linqpad.net দেখুন আরও তথ্যের জন্য দেখুন) স্ক্রিপ্ট যা প্রতি 8 মিনিটে আমার ওয়েব সাইটটিতে আসে (অ্যাপ্লিকেশনটি আনলোড করার চেয়ে কম - যা 20 মিনিট হওয়া উচিত) এবং আমি ছেড়ে দিয়েছি এটি কয়েক ঘন্টা চালায়।

স্ক্রিপ্টটি চলার সময় আমি আমার ওয়েব সাইটটিকে হিট করেছি এবং প্রতিবার আমার সাইটটি খুব দ্রুতগতিতে উঠে আসে। এটি আমাকে একটি ভাল ধারণা দেয় যে সম্ভবত আমি যে অচ্ছলতার মুখোমুখি হয়েছিলাম তা এএসপি.নেট এমভিসি শুরুর সময়গুলির কারণে হয়েছিল।

লিনকপ্যাড পান এবং আপনি নিম্নলিখিত স্ক্রিপ্টটি চালাতে পারেন - কেবল নিজের নিজস্ব ইউআরএল পরিবর্তন করুন এবং এটি চালিত হতে দিন এবং আপনি এটি সহজে পরীক্ষা করতে পারেন। শুভকামনা।

দ্রষ্টব্য : লিনকপ্যাডে আপনাকে F4 টিপতে হবে এবং আপনার পৃষ্ঠাটি পুনরুদ্ধার করবে এমন লাইব্রেরি যুক্ত করতে System.Net- এ একটি রেফারেন্স যুক্ত করতে হবে।

এছাড়াও : নিশ্চিত হয়ে নিন যে আপনি স্ট্রিং ইউআরএল ভেরিয়েবলটিকে এমন কোনও URL- এ নির্দেশ করতে বদলেছেন যা আপনার এএসপি.নেট এমভিসি সাইট থেকে কোনও রুট লোড করবে যাতে ইঞ্জিনটি চলবে।

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

আমি বি ব্যবহার করব কারণ কর্মী প্রক্রিয়া পুনর্ব্যবহারের সাথে একত্রে এটি পুনর্ব্যবহারের সময় কেবল বিলম্ব হতে পারে a এটি অলসতার পরে প্রথম অনুরোধের প্রতিক্রিয়া হিসাবে সাধারণত প্রাথমিকভাবে জড়িত বিলম্ব এড়ায়। আপনি পুনর্ব্যবহারের সুবিধাগুলিও পেতে পারেন।


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

যদি অ্যাপ্লিকেশনটি এক্সএমএল থেকে যে কোনও কিছুর ডিসরিয়ালাইজ করে (এবং এতে ওয়েব পরিষেবাদি অন্তর্ভুক্ত রয়েছে ...) নিশ্চিত করুন যে ডিজেরিয়ায়নের সাথে জড়িত সমস্ত বাইনারিগুলির বিরুদ্ধে এসজিএন চালানো হয়েছে এবং ফলাফলগত ডিএলএলগুলি গ্লোবাল অ্যাসেম্বলি ক্যাশে (জিএসি) রাখুন। এটি এসজিএন এসেম্বলি দ্বারা ব্যবহৃত সমস্ত সিরিয়ালাইজেশন অবজেক্টগুলির বিপরীতে চালিত হয়েছিল এবং ফলাফল ডিএলএলে তাদের ক্যাশে করে aches এটি ডিস্ক থেকে কনফিগারেশন ফাইলগুলির প্রথম ডিসরিয়ালেজেশন (লোডিং) এবং ওয়েব পরিষেবাদিতে প্রাথমিক কলগুলিতে বিশাল সময়ের সঞ্চয় দিতে পারে। http://msdn.microsoft.com/en-us/library/bk3w6240(VS.80).aspx

যদি কোনও আইআইএস সার্ভারের ইন্টারনেটের বাইরে থাকা অ্যাক্সেস না থাকে তবে জেনারেটপুব্লিশারএভিডেন্স = "মিথ্যা" কে মেশিন.কনফিগে যোগ করে প্রমাণীকরণের বাইনারিগুলির জন্য শংসাপত্র প্রত্যাহার তালিকা (সিআরএল) বন্ধ করুন। অন্যথায় প্রতিটি কর্মী প্রক্রিয়াটি স্টার্ট-আপ চলাকালীন 20 সেকেন্ডেরও বেশি সময় ধরে স্থির থাকতে পারে যখন এটি কোনও সিআরএল তালিকা পাওয়ার জন্য ইন্টারনেটের সাথে সংযোগ স্থাপনের চেষ্টা করে times 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

সমস্ত অ্যাসেমব্লিতে এনজিইএন ব্যবহার বিবেচনা করুন। তবে সতর্কতার সাথে ব্যবহার না করে এটি পারফরম্যান্সের অনেক বেশি লাভ দেয় না। এটি কারণ প্রতিটি প্রক্রিয়া দ্বারা লোড করা সমস্ত বাইনারিগুলির বেস লোড ঠিকানাগুলি ওভারল্যাপটি না নেওয়ার জন্য যত্ন সহকারে নির্ধারিত সময়ে সেট করা উচিত। অ্যাড্রেসের সংঘর্ষের কারণে যদি বাইনারিগুলি লোড করা হয় তবে তাদের পুনঃস্থাপন করতে হবে, এনজিইএন ব্যবহারের প্রায় সমস্ত কার্যকারিতা লাভ হারাবে। http://msdn.microsoft.com/en-us/magazine/cc163610.aspx


0

নিষ্ক্রিয়তার 4 মিনিটের পরে প্রথম অনুরোধে আমি ধারাবাহিকভাবে 15 সেকেন্ডের বিলম্ব পাচ্ছিলাম। আমার সমস্যাটি হ'ল আমার অ্যাপ্লিকেশনটি এসকিউএল সার্ভারে উইন্ডোজ ইন্টিগ্রেটেড অথেনটিকেশন ব্যবহার করছে এবং সার্ভিস প্রোফাইলটি সার্ভারের চেয়ে আলাদা ডোমেনে ছিল। এটি অ্যাপ্লিকেশন শুরু হওয়ার পরে আইআইএস থেকে এসকিউএল পর্যন্ত ক্রস-ডোমেন প্রমাণীকরণের কারণ হয়েছিল - এবং এটিই আমার বিলম্বের আসল উত্স। আমি উইন্ডোজ প্রমাণীকরণের পরিবর্তে একটি এসকিউএল লগইন ব্যবহার করে পরিবর্তন করেছি। দেরি হয়ে গেল ততক্ষনে। পারফরম্যান্স উন্নত করতে সহায়তা করার জন্য আমার কাছে এখনও সমস্ত অ্যাপ্লিকেশন সূচনা সেটিংস রয়েছে but তবে আমার ক্ষেত্রে সেগুলির প্রয়োজন হয় না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.