تغییر Idle Timeout در پلسک و ویندوز سرور
Idle Timeout چیست؟
Idle Timeout به مقدار زمانی گفته میشود که یک اتصال، فرآیند یا نشست (Session) در صورت عدم فعالیت یا عدم استفاده کاربر، فعال باقی میماند و پس از اتمام این زمان، به صورت خودکار بسته میشود یا به حالت تعلیق در میآید تا منابع سرور آزاد شوند.
این مقدار معمولا به صورت پیشفرض روی ۵ تا ۲۰ دقیقه تنظیم میشود و تنظیم درست آن برای حفظ تعادل بین تجربه کاربری (User Experience) و بهینهسازی منابع سرور (Resource Optimization) حیاتی است. افزایش زیاد این مقدار میتواند سرور را بیش از حد درگیر نگه دارد، در حالی که کاهش زیاد آن ممکن است کاربران را مجبور کند مکررا وارد سیستم شوند یا سشن خود را از دست بدهند.
تغییر Session Timeout در کنترل پنل پلسک (Plesk)
در پلسک، شما معمولا Session Timeout وبسایتهای مبتنی بر ASP.NET را تغییر میدهید که مدت زمان فعال ماندن نشست یک کاربر در آن وبسایت را تعیین میکند.
مراحل تغییر Session Timeout در پلسک
- ورود به پنل: به عنوان ادمین یا مالک دامنه وارد کنترل پنل پلسک شوید.
- انتخاب دامنه: از قسمت Domains یا Websites & Domains، دامنه مورد نظر خود را انتخاب کنید.
- تنظیمات ASP.NET: در صفحه مدیریت دامنه، روی گزینه ASP.NET Settings کلیک کنید.
- اعمال تغییر: به انتهای صفحه بروید و مقدار Session timeout (minutes) را به دقیقه مورد نظر (مثلا ۲۰ دقیقه) تغییر دهید.
- ذخیره: برای اعمال تغییرات، روی گزینه Ok یا Apply کلیک نمایید.
تنظیمات Idle Timeout در ویندوز سرور (IIS)
در محیط ویندوز سرور و اینترنت اینفورمیشن سرویسز (IIS)، دو تنظیم مهم برای مدیریت زمانهای «عدم فعالیت» وجود دارد که باید به صورت جداگانه تنظیم شوند:
۱. تنظیم Idle Timeout برای Application Pool
Application Pool Idle Timeout مدت زمانی است که یک Application Pool (استخر برنامه) در صورت دریافت نکردن هیچ درخواست جدیدی، فرآیند کاری خود را متوقف (Unload) میکند تا حافظه و منابع سرور را آزاد کند.
مسیر دسترسی در IIS Manager
- از طریق Remote Desktop به سرور ویندوز خود متصل شوید.
- IIS Manager (مدیریت IIS) را باز کنید.
- به بخش Application Pools (استخرهای برنامه) بروید.
- روی Application Pool مربوط به دامنه مورد نظر (معمولا به نام دامنه) کلیک راست کرده و Advanced Settings… را انتخاب کنید. (در نسخههای قدیمیتر ممکن است به آن Properties گفته شود.)
- در قسمت Process Model، مقدار Idle Time-out (minutes) را به مقدار دلخواه (مثلا ۶۰ دقیقه) تغییر دهید.
مسیر یکپارچه: IIS Manager→Application Pools→[App Pool]→Advanced Settings→Idle Time-out
روی OK کلیک کنید و برای اعمال سریع تغییرات، Application Pool را Recycle کنید.
۲. تنظیم Timeout برای Session State
این تنظیم، همانند تنظیم پلسک، مدیریت میکند که سشن کاربر در خود وبسایت برای چه مدت فعال باقی بماند.
مسیر دسترسی در IIS Manager
- IIS Manager را باز کنید.
- به بخش Sites یا Websites بروید و دامنه مورد نظر خود را انتخاب نمایید.
- در بخش مرکزی تنظیمات، گزینه Session State را پیدا کرده و روی آن کلیک کنید.
- در قسمت Time-out (in minutes)، مقدار مورد نظر را وارد نمایید.
مسیر یکپارچه: IIS Sites [Domain] Session State Time-out
نکات پیشرفته، امنیتی و عملکردی
تفاوت Idle Timeout و Session Timeout
- Idle Timeout (App Pool): مرتبط با زیرساخت سرور و IIS است. بهینهسازی منابع و خاموش کردن فرآیندهای غیرضروری را مدیریت میکند. بالا بودن آن، منابع زیادی را درگیر نگه میدارد.
- Session Timeout (Session State): مرتبط با برنامه وبسایت و تجربه کاربری است. مدت زمانی است که وضعیت کاربر (مثلا کالای داخل سبد خرید یا ورود به پنل) حفظ میشود.
تنظیمات Recycling در Application Pool
اگر Idle Time-out
را بالا تنظیم میکنید، حتما تنظیمات Recycling را بررسی نمایید. فعال کردن تنظیماتی مانند Regular Time Interval
(بازیافت در زمان مشخص) باعث میشود حتی اگر Application Pool فعال باشد، به صورت دورهای بازیافت شده و از نشت حافظه (Memory Leak) جلوگیری شود.
توصیه مهم در مورد افزایش زمان
هشدار: مقدار Idle Timeout را به صورت نامعقولی بالا نبرید (مثلا ۲۴۰ دقیقه یا بیشتر). نگهداشتن Application Poolها در حالت فعال برای مدتهای بسیار طولانی، خصوصا در سرورهایی با منابع محدود، منجر به:
- درگیر ماندن حافظه (RAM): حتی Application Poolهای غیرفعال هم مقداری حافظه اشغال میکنند. معمولا با خرید سرور مجازی خارج، به یک میزان محدودی از رم دسترسی خواهید داشت که درگیر ماندن آن، باعث اختلال در عملکرد دیگر بخشهای سرویس شما میشود.
- مشکلات عملکردی: تجمع فرآیندهای قدیمی که ممکن است دارای خطاهای نرمافزاری (مثل نشت حافظه) باشند.
همیشه مقداری را انتخاب کنید که بین راحتی کاربران و پایداری عملکرد سرور، تعادل ایجاد کند. معمولا مقادیر ۲۰ تا ۶۰ دقیقه برای Idle Timeout App Pool و ۳۰ تا ۱۲۰ دقیقه برای Session Timeout گزینههای منطقی هستند.
ملاحظات فنی و سناریوهای کاربردی
تأثیر معماری Application Pool بر Idle Timeout
فارغ از تنظیم ساده Idle Time-out در IIS، معماری و نوع اجرای Application Pool نیز بر نحوه مدیریت زمان بیکاری آن تأثیر میگذارد.
۱. حالتهای هویت (Identity)
تنظیم Identity یا هویت Application Pool (مثلا به صورت ApplicationPoolIdentity یا یک کاربر خاص) میتواند بر دسترسی آن به منابع و در نتیجه بر نحوه Unload شدن آن تأثیر بگذارد.
۲. حالت شروع (Start Mode)
- OnDemand (پیشفرض): Application Pool تنها زمانی شروع به کار میکند که اولین درخواست به آن برسد. این همان حالتی است که در آن تنظیم Idle Timeout به کار میآید و App Pool را پس از عدم فعالیت، خاموش میکند.
- AlwaysRunning: در این حالت، Application Pool بلافاصله پس از شروع IIS یا پس از
Recycle
شدن، شروع به کار میکند و همواره فعال باقی میماند. اگر این حالت فعال باشد، تنظیم Idle Timeout نادیده گرفته شده یا تأثیر کمتری دارد؛ این حالت برای سایتهای پر ترافیک یا اپلیکیشنهایی که نیاز به پردازش پسزمینه (Background Processing) دارند، مناسب است.
مدیریت زمان بیکاری در پلتفرمهای PHP/Apache
در حالی که تمرکز مقاله بر IIS ویندوز سرور بود، بسیاری از سرورهای اختصاصی خارجی مجهز به پلسک (خصوصا لینوکسی) از آپاچی (Apache) و PHP-FPM استفاده میکنند. مدیریت زمان بیکاری در این محیط متفاوت است:
تنظیمات در PHP-FPM
برای وبسایتهای PHP، به جای Application Pool در IIS، از PHP-FPM (FastCGI Process Manager) استفاده میشود که وظیفه مدیریت فرآیندهای PHP را بر عهده دارد.
- idle_timeout: در تنظیمات Pool هر دامنه در PHP-FPM، پارامتری به نام
request_terminate_timeout
یا در برخی تنظیمات دیگر، یک idle timeout برای فرآیندهای Child وجود دارد که زمان مجاز برای عدم فعالیت یک فرآیند PHP قبل از خاتمه یافتن را مشخص میکند. - max_children: تعداد فرآیندهای PHP که در هر لحظه میتوانند فعال باشند. تنظیم نادرست این مقدار در کنار یک
idle timeout
بالا، میتواند به سرعت منجر به اشغال کامل حافظه سرور شود.
تنظیمات در آپاچی (KeepAlive)
در خود وبسرور آپاچی، پارامتر KeepAlive Timeout مدت زمانی است که آپاچی یک اتصال TCP را پس از ارسال پاسخ، برای دریافت درخواستهای بعدی از همان کاربر، باز نگه میدارد. این تنظیم هم به صورت غیرمستقیم بر مصرف منابع و زمان بیکاری تأثیر میگذارد.
مدیریت پیشرفته Idle Timeout و منابع CPU در IIS
مفاهیم پیشرفته Idle Timeout
عباراتی مانند idle timeout num non control streams
معمولا به تنظیمات بسیار دقیق در پشته پروتکلهای وب مدرن، به ویژه HTTP/2، مربوط میشوند. در حالی که Idle Time-out
معمولی (که قبلا توضیح داده شد) فرآیند Worker را مدیریت میکند، این تنظیمات به نحوه مدیریت جریانهای داده فعال در یک اتصال HTTP/2 میپردازند.
idle timeout num non control streams
این تنظیم در IIS به مدیریت اتصالاتی میپردازد که از طریق پروتکل HTTP/2 برقرار شدهاند. در HTTP/2، یک اتصال واحد میتواند شامل چندین جریان داده (Streams) باشد.
- Non-Control Streams (جریانهای غیر کنترلی): به جریانهای دادهای گفته میشود که محتوای واقعی وبسایت (مانند HTML، تصاویر، CSS و…) را حمل میکنند.
- Idle Timeout for Non-Control Streams: این مقدار، مدت زمانی را تعیین میکند که اگر تعداد جریانهای غیر کنترلی فعال در یک اتصال HTTP/2 به صفر برسد، اتصال قبل از قطع شدن توسط سرور منتظر میماند.
تنظیم این مقدار به خصوص در محیطهایی که از فناوریهایی مانند gRPC (بر پایه HTTP/2) استفاده میکنند، اهمیت دارد؛ زیرا برای حفظ اتصالات طولانیمدت (Long-Lived Connections) لازم است.
idle timeout num non control streams 0
تنظیم این مقدار بر روی صفر (0) میتواند به معنای غیرفعال کردن این نوع خاص از Idle Timeout
باشد. این یعنی سرور تا زمانی که جریانهای کنترلی فعال باشند (یا تا زمانی که Connection Timeout
کلی منقضی شود)، اتصال را قطع نمیکند. این تنظیم معمولا برای سناریوهایی با تأخیر کم (Low-Latency) و اتصالات دائم (Persistent Connections) مورد نیاز است.
idle timeout و idle logout time
- idle timeout: این اصطلاح یک کوئری عمومی است که به تمام انواع زمانهای بیکاری (شامل Session State و Application Pool) اشاره دارد و در بخشهای قبلی به طور مفصل پوشش داده شد.
- idle logout time: این اصطلاح بیشتر یک مفهوم کاربردی یا امنیتی است و به مدت زمانی اشاره دارد که یک کاربر در یک نرمافزار یا سیستم عامل (مثلا پنل مدیریت) در صورت عدم فعالیت، به صورت خودکار از سیستم خارج (Logout) میشود. این تنظیم مستقیما در IIS وجود ندارد، بلکه توسط کد برنامه وبسایت (مانند PHP، ASP.NET و…) یا تنظیمات سیستم عامل مدیریت میشود و هدف آن حفظ امنیت نشستها است.
تنظیم محدودیت CPU در IIS
یکی از مهمترین اقدامات برای جلوگیری از “درگیر نمودن سرور” که در ابتدای مقاله به آن اشاره شد، اعمال محدودیتهای سختافزاری بر Application Poolها است. تنظیم محدودیت CPU در IIS به سرور اجازه میدهد تا منابع را بین وبسایتهای مختلف به صورت عادلانه توزیع کند و از سقوط سرور در اثر عملکرد نادرست یک وبسایت جلوگیری نماید.
مراحل تنظیم محدودیت CPU (CPU Throttling)
- دسترسی به Application Pool: در IIS Manager، به بخش Application Pools بروید.
- انتخاب Application Pool: روی Application Pool مورد نظر خود کلیک راست کرده و گزینه Advanced Settings… را انتخاب کنید.
- بخش CPU: به قسمت CPU بروید.
- تنظیم Limit (درصد):
- Limit: در اینجا میتوانید حداکثر درصد استفاده از CPU را برای این Application Pool تعیین کنید (مثلا ۷۵٪).
- Limit Action: این تعیین میکند که اگر حد مجاز CPU نقض شود، IIS چه واکنشی نشان دهد:
- NoAction (بدون عمل): فقط یک اخطار ثبت میشود.
- KillW3wp (پیشنهادی): فرآیند Worker (W3WP.exe) را خاتمه میدهد.
- Throttle (کاهش سرعت): سرعت فرآیند را کاهش میدهد تا در محدوده بماند.
- Limit Interval (ثانیه): مدت زمانی که استفاده از CPU باید از حد مجاز فراتر رود تا
Limit Action
اجرا شود.
اهمیت تنظیم محدودیت CPU
تنظیم این محدودیتها در محیطهای هاستینگ بهینه اشتراکی یا سرورهایی که چندین وبسایت مهم را میزبانی میکنند، حیاتی است. با تنظیم Limit
و Limit Action
بر روی KillW3wp
، شما مطمئن میشوید که اگر یک وبسایت دچار لوپ بینهایت (Infinite Loop) یا مصرف بیش از حد CPU شود، تنها Application Pool آن سایت متوقف میشود و سایتهای دیگر سرور همچنان به کار خود ادامه میدهند و منابع آنها به خطر نمیافافتد.
سوالات متداول
Application Pool Idle Time-out یک تنظیم سروری است که به IIS میگوید چه زمانی فرآیند کاری وبسایت شما را خاموش کند تا حافظه سرور آزاد شود. در مقابل، Session Time-out یک تنظیم کاربردی است که مشخص میکند سشن فعال یک کاربر (مثلاً پس از ورود به سیستم) در صورت عدم فعالیت چقدر دوام داشته باشد.
اگر Application Pool Idle Time-out را روی صفر (0) تنظیم کنید، Application Pool مربوطه هرگز به دلیل عدم فعالیت خاموش نخواهد شد. در این حالت، فرآیند کاری وبسایت شما همیشه فعال باقی میماند، که برای سایتهای پر ترافیک مناسب است، اما مصرف دائمی منابع (RAM) سرور را تضمین میکند.
بازهم عالی بود.
باز هم از شما متشکریم
سلام وقت بخیر
سایت خیلی خوبی دارید به جرات یکی از بهترین ها در زمینه ی شغلی فعالیتتون هستید سپاس
سلام و وقت بخیر
ممنونیم از شما، این بازخورد مثبت شما از بهترین سرمایه های ما است و امیدواریم بتوانیم بیش از پیش در خدمت شما باشیم. با آرزوی بهترین ها…
اصلا به درد نخورد
با سلام خدمت شما
متاسفیم از این که مقاله نیاز شما را برآورده نکرده است. در صورتی که این مورد را بر روی هاست ها انجام داده اید اعلام نمایید زیرا با توجه به این که بر روی هاست های ما انجام این تغییرات محدود شده است ممکن است که برای شما کاربردی نبوده است. در صورت امکان اعلام نمایید که بر روی چه سرویسی تغییرات را اعمال کرده اید که نیاز شما را برآورده نکرده است؟
با تشکر و احترام