محمد نصیری
بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

معرفی 8 نکته مهم Performance Tuning در IIS برای بالا بردن سرعت

بهینه سازی وب سرور IIS برای بالا بردن سرعت یا اصطلاحاً Performance Tuning یکی از مهمترین فاکتورهایی که باعث می شود صفحات وب ما با سرعت بهتری Load شوند ، مدیریت و پیکربندی درست و البته بهینه سازی وب سرور مربوط به آن وب سایت است. این مورد در خصوص وب سرور IIS شرکت مایکروسافت نیز صادق است. شما با استفاده از وب سرور IIS و از نسخه 7 به بالای این وب سرور می توانید تنظیماتی را انجام دهید تا این وب سرور بتواند سرویس دهی بهتر و البته کارایی بهتری در سرویس دهی صفحات وب از خودش نشان بدهد. در این مطلب فنی می خواهیم در انجمن تخصصی فناوری اطلاعات ایران در خصوص چگونگی بهینه سازی وب سرور IIS برای سرویس دهی و بالا بردن کارایی وب سایت ها صحبت کنیم بنابراین تا انتهای مطلب با ما باشید.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

تنظیمات لاگ برداری | Logging

اگر طبق عادت مدیرهای شبکه وب سرور IIS را بصورت پیشفرض و با تنظیمات اولیه نصب می کنید ، باید بدانید که IIS تقریبا هر چیزی که در اطرافش اتفاق می افتد را Log برداری می کند. لاگ برداری از یک سرویس یک ویژگی امنیتی محسوب می شود که بعدها می توانید از این لاگ ها برای انجام تجزیه و تحلیل های وب سرور استفاده کنید اما در بیشتر اوقات ما اصلا به Log ها یا نگاه نمی کنیم و یا Log هایی را ثبت می کنیم که اصلا مفید نیستند و به ندرت مورد استفاده قرار می گیرند.

طبیعی است که لاگ برداری به خودی خود یک بار کاری بر روی CPU وب سرور می گذارد که این بار کاری می تواند به اندازه ای زیاد شود که کارایی وب سرور شما را واقعا تحت تاثیر قرار بدهد. هیچوقت فراموش نمی کنم که در یک سازمان دولتی که به عنوان مشاور کار می کردم ، یکی از وب سرورهای عمومی IIS این سازمان به اندازه ای Log برداری کرده بود که درایو C این وب سرور تنها 5 گیگابایت از 300 گیگابایت فضای موجود را اشغال نکرده بود. بعد از بهینه سازی و حذف Log برداری های غیر ضروری 290 گیگابایت فضای خالی در وب سرور به دلیل حذف کردن Log ها ایجاد شد.

بالا بردن کارایی وب سرور IIS

به هر حال هر لاگی به درد ما نمی خورد و شما باید تنظیمات Logging را به اندازه ای پیکربندی کنید که نیاز دارید ، برای اینکار می توانی به کلی Logging های اضافی را غیرفعال کنید. برای پیکربندی تنظیمات Logging وب سرور IIS ابتدا وارد کنسول مدیریتی آن شوید و سپس از قسمت Sites بر روی وب سرور راست کلیک کنید و حالت Feature View را فعال کنید و بر روی Log کلیک کنید و تا امکانات Logging وب سرور IIS باز شود و از این قسمت می توانید Logging های غیر ضروری IIS را غیر فعال کنید.

توجه کنید که شما می توانید فرآیند Log برداری را هم در سطح سرور و هم در سطح وب سایت انجام دهید. دقت کنید که اگر واقعا می دانید که از نظر امنیتی هیچوقت به Log ها مراجعه نمی کنید ترجیجا از طریق Server Manager ویندوز به صورت کلی تیک قسمت Http Logging و سایر Logging ها را غیرفعال کنید و از وب سرور خود حذف کنید.

ASP Debugging را غیرفعال کنید

زمانیکه شما سرور خود را در یک محیط عملیاتی اجرا می کنید ، به احتمال قریب به یقین نیازی به فعال کردن قابلیت ASP debugging و به طبع آن ASP.NET debugging نخواهید داشت. غیرفعال کردن قابلیت Debugging برای ASP و ASP.NET باعث آزاد شدن مقدار قابل توجهی از منابع پردازشی CPU و اختصاص آن به سایر پردازش ها می شود. برای غیرفعال کردن Debugging کافیست بر روی وب سرور IIS خود کلیک کنید و از قسمت Feature View در سمت راست تصویر بر روی compilation کلکی کنید و بر روی debugging properties کلیک کنید و سپس مقادیر زیر را به شکل زیر در حالت false قرار بدهید :

بالا بردن کارایی وب سرور IIS
Server side debugging: false
Client side debugging: false
وب سایت توسینسو

محدود کردن تعداد Thread ها

اینکار باعث می شود تعداد درخواست هایی که IIS بصورت همزمان مدیریت می کند محدود شود. معمولا مقدار پیشفرض این پارامتر در IIS عدد 25 است . حداکثر مقداری که شما می توانید برای این مورد نظر بگیرید عدد 100 است . برای اینکه بتوانید بهترین کارایی را از وب سرور IIS دریافت کنید بهترین گزینه عدد 50 است.

برای تغییر این مقدار در کنسول مدیریتی IIS به قسمت Feature View و قسمت ASP یا ASP.NET بروید و بر روی آن دابل کلیک کنید. سپس بر روی limit properties کلیک کنید و مقدار مورد نظرتان را قرار بدهید. البته شما باید با تغییر دادن این مقادیر و مانیتور کردن مرتب وب سرور خود کارایی وب سرور را ابتدا آزمایش کنید و مقدار مناسب وب سرور خود را انتخاب کنید.

وب سایت توسینسو

تغییر طول صف در ASP.NET

آیا تا به حال با خطای HTTP Error 503 یا Server Too Busy در وب سرور ها مواجه شده اید ؟ این خطا به این معناست که سرور IIS یا هر وب سرور دیگری تعداد درخواست های بسیار زیادی را دریافت کرده است که خارج از محدوده سرویس دهی وب سرور می باشد ، در خصوص کاربران وب سرور IIS هم به همین شکل است

شما می توانید تعداد این درخواست ها که وب سرور می تواند به آنها پاسخگو باشد را مدیریت کنید و بر حسب اندازه ترافیکی که احساس می کنید وب سایت شما خواهد داشت تعداد درخواست هایی که می توانند در صف انتظار پاسخگویی قرار بگیرند را بالا یا پایین بیاورید. اگر Queue Length شما بالا باشد ، IIS صرفا به کاربرانی پیام Server Busy یا 503 را نشان می دهد که مدت زمان طولانی تری در صف باقی مانده اند .

وب سایت توسینسو

اگر مقدار این پارامتر کم باشد سرور در وهله های زمانی بسیار کوتاه پیام Server Too Busy را نمایش می دهد و شما به مراتب خیلی سریعتر پیام 503 Service Unavailable را دریافت می کنید. اگر شما مطمئن نیستید که چه عددی بهتر است در این قسمت به عنوان Length قرار بگیرد بهتر است از طریق راهنمای مایکروسافت عمل کنیم 

در راهنمای مایکروسافت برای تعیین این عدد به این شکل آمده است که اگر شما 4 پردازنده دارید و ASP Thread Processor شما مقدار پیشفرض 25 دارد ، شما می توانید Queue Length را ب به شکل 25 ضربدر 4 که برابر عدد 100 می شود قرار بدهید یعنی به ازای هر پردازنده یک 25 اضافه می شود شما می توانید این مقدار را از قسمت limit properties با همان روشی که ASP Thread Processor را عوض می کنید تغییر بدهید.

فعال سازی HTTP Compression

بصورت پیشفرض زمانیکه درخواست کلاینت به سمت وب سرور ارسال می شود بصورت فشرده سازی نشده پاسخ داده می شود و همین موضوع ضمن اینکه می تواند در مصرف پهنای باند شما تاثیر گذار باشد باعث کندی Load شدن صفحات وب شما هم می شود. زمانیکه می خواهید IIS را نصب کنید به این موضوع دقت کنید که گزینه های Dynamic content compression و Static content compression حتما نصب شوند. شما می توانید فشرده سازی را در IIS هم در سطح وب سایت و هم در سطح وب سرور فعال کنید.

فشرده سازی باعث می شود که درخواست های کلاینت در زمان پاسخگویی فشرده شوند و ظرفیت کمتری به خود اختصاص بدهند و بعد از انتقال به مرورگر کلاینت از حالت فشرده خارج شوند ، برای فعال کردن HTTP Compression در لایه سرور کافیست بر روی اسم سرور راست کلیک کنید و از پنل امکاناتی که ظاهر می شود گزینه Compression را انتخاب کنید.

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

تصویر مربوط به فشرده سازی در IIS

تنظیمات HTTP Expire Header

با فعال کردن قابلیت HTTP Expire Header شما میزان درخواست های HTTP ای که که توسط کاربران ایجاد می شود و به وب سرور ارسال می شود را به حداقل می رسانید . با اینکار و فعالیت کردن این قابلیت ، مرورگر کلاینت بعد از مشاهده کردن صفحات وب سایت شما آنها را در خود Cache می کند ، تصاویر ، CSS و ... از جمله مواردی هستند که در مرورگر کلاینت Cache می شوند و ضمن بالاتر بردن مرور صفحات وب توسط کلاینت بار کاری وب سرور را نیز پایین می آورند.

برای پیکربندی این خاصیت در وب سرور IIS کافیست از طریق وب سرور IIS و کلیک کردن بر روی گزینه HTTP Response بر روی گزینه set common headers کلیک کنید. سپس بر روی قسمت expire web contents کلیک کنید و تعداد روزها و یا ساعت هایی که می خواهید محتوای وب سرور بر روی Cache کلاینت باقی بماند را مشخص کنید.

البته دقت کنید که نرم افزاری که در وب سرور قرار گرفته است نیز به خودی خود ممکن است قابلیت Caching را در خودش پیاده سازی کرده باشد ، ترجیحا Caching را در یک لایه در نظر بگیرید تا تداخلی بین ایندو پیش نیاید. اگر برای نرم افزار تحت وب خود در Login و باقی ماندن Session فعال محدودیت زمانی قرار داده اید سعی کنید حدالمقدور این مدت زمان با زمان Cache تناسب داشته باشد.

تصویر مربوط به استفاده از HTTP Expire Header در IIS

قابلیت Output Caching

اگر از HTTP Expire Header برای مثال به عنوان Cache سمت کلاینت اسم ببرسیم از Output Caching می توانیم به عنوان Cache قسمت سرور یاد کنیم. زمانیکه شما قابلیت Output Caching را فعال می کنید ، وب سرور IIS یکی کپی از همه درخواست هایی که توسط کلاینت ها برای باز کردن صفحات وب ارسال می شود نگه می دارد ، زمانیکه یک کاربر یک صفحه وب را درخواست می دهد 

اگر وب سرور تشخیص دهد که قبلا این صفحه بارها باز شده و مورد استفاده قرار گرفته است ، صفحه مورد نظر را از طریق Cache خودش باز می کند و برای کاربر ارسال می کند ، اینکار هیچگونه پردازش دوباره ای بر روی وب سرور نخواهد داشت . قابلیت Output Caching می تواند به شدت در بالا بردن زمان پاسخگویی وب سرور شما به ویژه برای صفحات Dynamic وب موثر باشد و کارایی وب سرور شما را افزایش بدهد.

تصویر مربوط به فعال کردن قابلیت Output Caching در وب سرور IIS

محدودیت تعداد Connection

قابلیت Connection Limit یا محدودیت اتصالات در وب سرور IIS از نسخه 7 و 7 و نیم به خوبی نمایان شد. این ویژگی به شما امکان مدیریت کردن اتصالات به وب سرور به سه روش مختلف را می دهد، شما با استفاده از Connection Limit می توانید Timeout ، حداکثر میزان پهنای باند مورد استفاده برای هر وب سایت و در نهایت تعداد اتصالات همزمان به وب سرور را مدیریت کنید.

در وب سرور IIS نسخه 7.5 عدد timeout پیشفرض برای این وب سرور 120 ثانیه است که به این معنا است که بعد از گذشت این مدت زمان بصورت خودکار http session برقرار شده توسط وب سرور پایان می پذیرد. زمانیکه یک کاربر یک صفحه وب را باز می کند و این صفحه را به مدت زمان طولانی باز نگه می دارد

و هیچگونه فعالیتی بر روی این صفحه انجام نمی دهد ، وب سرور IIS بایستی این صفحه را در اصطلاح Live نگه دارد ، با توجه به اینکه در چنین صفحه ای هیچگونه فعالیتی انجام نمی شود و فقط صفحه باز باقی مانده است ، منابع پردازشی وب سرور را برای Keep Alive بودن به خودش اختصاص می دهد .

تصویر صفحه Connection Limit برای وب سرور

برای بالا بردن کارایی وب سرور شما باید این مدت زمان را تا جاییکه امکان دارد پایین نگه دارید و حداقل مدت زمان لازم را در این قسمت وارد کنید، البته توجه کنید که این مدت زمان نباید زیاد هم کم باشد. برای مثال شما می توانید این مدت زمان را از 120 به 70 کاهش دهید.

برای تغییر دادن Connection Timeout کافیست بر روی وب سرور راست کلیک کنید و بر روی Manage Website کلید کنید. سپس بر روی قسمت Advanced Settings کلیک کنید و در نهایت بر روی قسمت Connection Limits کلیک کرده و مقدار مورد نظر خود را برای Timeout وارد کنید.

گزینه Connection Limit به شما این اجازه را می دهد که حداکثر پهنای باند مورد استفاده در هر ثانیه و همچنین حداکثر تعداد اتصالات همزمان که خارجکیش میشه Maximum bandwidth per second و Maximum concurrent connection per second را تعیین کنید. گزینه Maximum allowed bandwidth به یک وب سایت اجازه می دهد که از مقدار پهنای باند مشخصی در هر ثانیه استفاده کند

بنابراین در صورتیکه شما در یک هاستیگ کار می کنید که از قابلیت های Shared Hosting استفاده می کند ، پهنای باند برای استفاده سایر وب سایت ها نیز باز خواهد شد. اگر وب سرور شما اختصاصی برای یک وب سایت مورد استفاده قرار می گیرد می توانید پهنای باند زیادی به وب سایت خودتان بصورت اختصاصی اختصاص دهید.

کنترل کردن تعداد اتصالات همزمان به وب سرور IIS یا خارجکیش Concurrent Connection ضمن اینکه باعث بالا رفتن کارایی وب سرور IIS می شود می تواند از نظر امنیتی هم فاکتور بسیار مهمی برای IIS باشد. این قابلیت به شما این امکان را می دهد که در یک وهله زمانی خاص فقط اجازه اتصال تعداد مشخصی کاربر به وب سرور را بدهید.

در چنین مواقعی اگر یک نرم افزار مخرب بخواهد درخواست های بسیار زیادی به وب سرور ارسال کند و Session های زیادی بیخودی ایجاد کند ، درخواست های جدید آن Reject می شوند و از به وجود آمدن Overload بر روی وب سرور جلوگیری می شود و به نوعی از بروز یک نوع حمله DDoS پیشگیری می شود.

بعد از اینکه تغییرات گفته شده در این دو مقاله را در وب سرور خود انجام دادید حتما شاهد تغییراتی در جهت بهبود کارایی وب سرور خودتان خواهید بود ، معمولا بعد از انجام این تغییرات پیشنهاد می شود که شما وب سرور را یکبار Restart کنید.

همچنین می توانید از سرویس های گوگل برای تست سرعت و Load صفحات استفاده کنید و آزمایش کنید. فقط به این مورد توجه کنید که این فقط یک پیکربندی ساده برای بالا بردن کارایی وب سرور IIS است و برای انجام فرآیند های پیشرفته تر بایستی مراحل دشوارتری را انجام دهید.

دقت کنید که هر کاری که ما در اینجا انجام دادیم برای کارایی وب سرور است ، اگر طراحی پایگاه داده یا نرم افزار خود وب سایت مشکلی داشته باشد برای آن نمی توانیم کاری بکنیم مگر اینکه طراحی مجدد آن را انجام دهیم ، به هر حال امیدوارم مورد توجه شما قرار گرفته باشد در انتها اگر نکته خاصی به نظرتان می رسد خوشحال می شویم در انتهای همین مطلب مطرح کنید.


محمد نصیری
محمد نصیری

بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات

محمد نصیری هستم ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 50 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم و مقیم کشور ترکیه هستم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.

نظرات