همانطور که مي دانيد در نسخه 4.4.0 دات نت نيوک توجه ويژه اي به کارايي و انعطاف پذيري شده است . در همين راستا براي تشخيص اينکه کدام ناحيه از دات نت نيوک احتياج به بهينه سازي دارد . در ابتدا لازم است که درک کاملي از نحوه عملکرد IIS و ASP.NET در محيط ويندوز داشته باشيم. ما در تحقيقاتمان در اين موضوع به چند نکته برخورد کرديم . بنابراين ما فکر مي کنيم مفيد است که دانش عمومي را در اين زمينه افزايش بدهيم و يافته هايمان را در اختيار ديگران قرار دهيم . بر همين اساس خلاصه اي از يافته هايمان را ارانه مي دهيم. در ابتدا بعضي از اصطلاحات فني را توضيح مي دهيم . AppDomain : (دامنه برنامه) يک Application Domain (ASP.NET) . يک نگهدارنده براي کد و داده است که مفهوم جداسازي را در يک برنامه پياده سازي مي کند. در مفهوم عام به آن وب سايت يا يک برنامه تحت وب گفته مي شود. يک دامنه برنامه معمولا يک شاخه bin دارد که تمام کتابخانه هاي اجرايي در آن قرار مي گيرند.وقتي يک دامنه برنامه ايجاد مي شود تمام کتابخانه هاي داخل شاخه bin فراخواني مي شوند وراهي وجود ندارد براي اينکه از لود شدن يک کتابخانه خاص جلوگيري کرد حتي اگر آن کتابخانه در برنامه استفاده نشده باشد. AppPool : حوضچه برنامه يک Application Pool (windows 2003 / IIS 6.0) حوضچه برنامه داراي يک مکانيزم براي مديريت يک گروه از برنامه ها ست . هر حوضچه يک پراسس (worker process (w3wp.exe)))مربوط به خود را دارد . وقتي که يک برنامه در داخل حوضچه فراخواني ميشود راهي وجود ندارد که آن برنامه خاص را از حوضچه خارج کنيم حتي اگر آن برنامه فعال نباشد. هر حوضچه تنظيمات خاصي براي بازيابي و کارايي و بهينه بودن را دارد که به وسيله آن مي توانيم منابع سرور را بهينه کنيم . اولين چيزي که در محيط ويندوز بايد به آن بطور جدي اهميت داد مسئله حافظه مي باشد .فرض کنيم شما يک سرور با 2 گيگا بايت رم داريد . اين مقدار رم ماکزيمم مقدار رمي است که ويندوز 2003 براي پردازش تمام کاربران بطور پيش فرض استفاده مي کند (حتي اگر رم سرور شما بيشتر باشد ) . حال فرض کنیم 5 حوضچه برنامه داریم . براساس راهنمائیهای مایکروسافت برای آستانه بازیافت حافظه باید 80 درصد حافظه دردسترس رو در نظر گرفت . حال براساس این فرمول مقدار 2GB / 5 * 80%=320 MB را در قسمت بازیافت حافظه در تب Recycling در تنظیمات حوضچه برنامه در IIs 6 باید در نظر بگیریم . حالا فرض کنیم هر برنامه بطور متوسط 10 مگابایت حافظه نیازدارد. بر این اساس می توانیم تا 32 برنامه یا سایت رو در این حوضچه اجرا کنیم . باید در نظر گرفت که حتما نباید این 32 برنامه از برنامه های خیلی فعال باشند حتی اگر یک درخواست هم برای اجرای این برنامه ها باشد کفایت می کند. حال اگر براساس سرور ما بخواهیم 2000 سایت را روی این سیستم برای کارهای اقتصادی و تجاری استفاده کنیم برای هر حوضچه برنامه 400 سایت رو باید در نظر بگیریم . حال براساس مقدار حافظه و محدودیتی که در حافظه داریم فقط 32 تا از 400 سایت در هر لحظه می توانند فعال باشند . به محض اینکه از آستانه حافظه خارج شویم . IIS شروع به بازیافت حوضچه و خارج کردن تمام برنامه ها می کند سپس اولین درخواستی که برای حوضچه برسد ویندوز دوباره شروع به ساختن حوضچه می کند. و بعد از آن برنامه را اجرا می کند که تمام این مراحل باید سربارشدن حافظ و درگیر شدن پراسس می شود. بنابراین اولین درخواست با تاخیر زیادی اجرا می کند که اجتناب ناپذیر است . خوب حالا اگر ما تغییر بدیم مقدار آستانه حافظ را برای بازیافت . و اجازه بدیم که این مقدار به 80 درصد رم موجود افزایش یابد . ویندوز مجبور می شود از حافظه مجازی استفاده کند و شروع به ساختن تعداد زیادی از صفحه های دیسک disk paging می کند. این یک عملیات سنگینی است که بطور جدی بر کارایی حوضچه ها در سرور تاثیر می گذارد . اگر چه ممکن است حوضچه بطور مداوم بازیافت نشود . ولی می بینیم که سی پی یو و هارد بشدت درگیر می شوند. و این باعث کاهش کارایی سرور می شود. حالت دیگر اینست که وقتی پراسس مربوط به یک حوضچه برای مدت زمان 20 دقیقه بیکار باشد شروع به بازیافت حافظه می کند . و برای درخواست بعدی حوضچه دوباره ساخته می شود و سپس برنامه دوباره اجرا می شود که این نیز تاثیر معنی داری بر زمان پاسخ دهی سرور می گذارد. یک تکنیکی که توسط توسعه دهندگان ASP.NET برای زنده نگه داشتن یک سایت رواج یافته به آن Keep-Alive گفته می شود. اساسا این یک سرویس (داخلی یا خارجی ) است که بطور ثابت درخواست هایی را برای یک برنامه می فرستد که این باعث میشود هرگز این برنامه توسط پراسس بیکار سیستم بازیافت نشود. تاثیر Keep-Alive برای یک برنامه خاص در حوضچه برنامه خیلی معنی دار نیست .ولی اگر از این تکنیک خیلی استفاده شود در یک حوضچه باعث می شود آستانه بازیافت حافظه به طور عادی افزایش یابد. که باعث بازیافت حافظه می شود. با تمام این عواملی که گفته شد . یک برنامه ASP.NET باید کوشش کند تا به یک زمان مناسب برای پاسخ دهی دست یابد. دات نت نیوک 4.4.0 سعی کرده است که به تغییرات موثری در این ناحیه دست یابد. ترجمه : سید محمد امیر جهانشاهی
نام (الزامی)
ایمیل (الزامی)
وب سایت
پیگیری نظرات و اطلاع رسانی از طریق ایمیل
کلیه حقوق مادی و معنوی سایت برای Irandnn.ir محفوظ می باشد شرایط استفاده | حريم شخصي كاربران