PDA

View Full Version : مشکل دیر بالا آمدن سایت بعد از ریست شدن IIS



KavoshGar_ir
شنبه 11 خرداد 1392, 11:56 صبح
سلام دوستان و اساتید گرامی
من در یکی از سایتهایی که طراحی کرده ام بدلیل افزایش بازدید کننده و استفاده بیش از حد منابع CPU سرور, iis به طور خودکار stop میشه و به اصطلاح کل اپلکیشن ریست میشه ...

حل مشکل استفاده بیش از حد از منابع که فقط استفاده از سرور مجازی و یا سرور اختصاصی است.

ولی اگر سایت سریع بالا بیاد باز هم تا حدی قابل تحمله ... اما زمانی که iis استاپ میشه حدود 10 الی 20 دقیقه ( به طور خودکار ) طول میکشه تا سایت بالا بیاد. ( البته در زمانی که سایت قطع میشه همه کاربرها میخوان سریعا وارد سایت شوند شاید این قضیه باعث دیر بالا آمدن سایت میشه ... که راه حلی برای آن ندارم!)

من اگر زمانی که سایت Application unavailable میشه آنلاین باشم و سریعا فایل app_offline.htm در روت سایت قرار بدم و بعد آن را حذف کنم سایت در کمتر از چند ثانیه بالا میاد.( ظاهرا پروسس ها به درستی kill میشه که قبلا نشده ... )

به ذهنم ( یک روش تخیلی ) رسید به این ترتیب که در Application_onEnd این فایل را به صورت داینامیک ایجاد و حذف کنم ولی روش درستی نبود و جواب هم نداد.

حالا من 2 سوال دارم:
اولا زمانی که iis ریست میشه قاعدتا اپلیکشن من ریست شده بنابراین همه پروسس ها kill شده ولی چرا 10 الی 20 دقیقه طول میکشه به طور خودکار بالا بیاد؟ مشکل دیگه ای وجود داره؟

ثانیا اگر مورد بالا جواب درستی نداره من چطور میتونم این قطعه کد بنویسم که به صورت اتوماتیک زمانی که Application_onEnd رخ داد فایل app_offline.htm در روت قرار بگیره و به هنگام Application_Start این فایل ری نیم یا حذف بشه؟

پیشنهاد شما چیه؟:متفکر:

raziee
شنبه 11 خرداد 1392, 21:48 عصر
با سلام.
در صورتی که دلیل اصلی عدم پاسخگویی سرور برای تعداد بازدیدتون هست ، سرور رو تغییر بدید برادر.
اما ممکنه بروز خطاهای زیاد باعث Off شده Application Pool باشه. لاگ های خطا رو بررسی کنید. اگه لاگ تهیه نمیکنید این کار رو حتما انجام بدید.

در رویداد های مورد نظر میتونید کد نویسی کنید و عملیاتی که میخواهید رو انجام بدید.
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
}

void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
}

void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
}

KavoshGar_ir
یک شنبه 12 خرداد 1392, 13:28 عصر
با سلام.
در صورتی که دلیل اصلی عدم پاسخگویی سرور برای تعداد بازدیدتون هست ، سرور رو تغییر بدید برادر.
اما ممکنه بروز خطاهای زیاد باعث Off شده Application Pool باشه. لاگ های خطا رو بررسی کنید. اگه لاگ تهیه نمیکنید این کار رو حتما انجام بدید.

در رویداد های مورد نظر میتونید کد نویسی کنید و عملیاتی که میخواهید رو انجام بدید.
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
}

void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
}

void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
}

دوست من ممنونم از پاسختان ...

اما اگر در سوالم دقت کنید زمانی که آی آی اس ریست می شود و کاربران مجبور هستند مجددا وارد سیستم شوند سایت به کندی بالا میاد و حدود 10 الی 20 دقیقه طول میکشه تا سرعت عادی بشه مثل اینکه پروسسی به درستی kill نشده باشه و مانع از بالا آمدن کامل سایت بشه ...

در اینجا و بعد از stop شدن iis اگر فایل app_offline.htm را در روت قرار بدم و آنرا بلافاصله حذف کنم سایت به سرعت بالا میاد ...

در رویداد Application_OnEnd هم خطا را دیباگ میکنم ولی هیچ چیزی ثبت نمیشه و پیام زیر درج شده ...

APPLICATION END
_shutDownReason = HostingEnvironment
_shutDownMessage = HostingEnvironment initiated shutdown HostingEnvironment caused shutdown
_shutDownStack = at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace() at System.Web.Hosting.HostingEnvironment.InitiateShut downInternal()

که ظاهرا خطای نرم افزاری نبوده و فقط بدلیل استفاده بیش از حد از منابع cpu سرور iis استاپ شده ...

سوالم من اینجاست با چه کد مطمئن بشم اپلکیشن اند به طور کامل پروسس های قبلی را kill کرده و اگر برای اینکار کدی وجود نداره ... چطور میتونم فایل app_offline.htm را بعد از خطا یکبار ایجاد و بلافاصله رینم یا حذف کنم ...