چطوری در iis بتوانیم تنظیمات وب سایت خودمون رو انجام بدیم که کرش نکنه

1403/11/13 · عباس کردیان اصلی
تنظیم Recycle خودکار در IIS

۱. تنظیم Recycle خودکار در IIS

IIS به‌صورت داخلی امکان تنظیم زمان‌بندی Recycle برای Application Pool را دارد. برای انجام این کار:

  1. IIS Manager را باز کنید.
  2. از قسمت Application Pools، روی App Pool موردنظر کلیک راست کنید و گزینه Advanced Settings را انتخاب کنید.
  3. در بخش Recycling, گزینه Regular Time Interval (minutes) را پیدا کنید و مقدار آن را روی یک مقدار مناسب (مثلاً ۳۰ یا ۶۰ دقیقه) قرار دهید.
  4. می‌توانید در بخش Specific Time(s) زمان‌های خاصی را برای ری‌سایکل تنظیم کنید (مثلاً هر روز ساعت ۲ بامداد).
  5. روی OK کلیک کنید تا تغییرات ذخیره شود.

۲. استفاده از Task Scheduler ویندوز

اگر نیاز به کنترل بیشتری دارید، می‌توانید یک اسکریپت PowerShell برای ریسایکل خودکار بسازید و آن را در Task Scheduler زمان‌بندی کنید.

ساخت اسکریپت PowerShell برای ریسایکل App Pool

Notepad را باز کنید و کد زیر را داخل آن قرار دهید:

توجه: نام Application Pool را در "YourAppPoolName" تغییر دهید.

Import-Module WebAdministration Restart-WebAppPool -Name "YourAppPoolName"

فایل را با نام RecycleAppPool.ps1 ذخیره کنید.

ایجاد Task در Task Scheduler

  1. Task Scheduler را در ویندوز باز کنید.
  2. از پنل سمت راست، روی Create Basic Task کلیک کنید.
  3. یک نام مثل Recycle IIS App Pool وارد کنید و Next بزنید.
  4. در مرحله Trigger، زمان‌بندی موردنظر (مثلاً هر ۱ ساعت) را تنظیم کنید.
  5. در مرحله Action گزینه Start a Program را انتخاب کنید.
  6. در بخش Program/script مقدار powershell.exe را وارد کنید.
  7. در بخش Add arguments مقدار زیر را قرار دهید:(مسیر فایل .ps1 را متناسب با محل ذخیره‌شده تغییر دهید)

-ExecutionPolicy Bypass -File "C:\path\to\RecycleAppPool.ps1"

  1. تنظیمات را ذخیره کنید.

۳. استفاده از خط فرمان (اختیاری)

اگر فقط گاهی نیاز به ریسایکل دستی دارید، می‌توانید این دستور را در CMD یا PowerShell اجرا کنید:

appcmd recycle apppool /apppool.name:"YourAppPoolName"

با این روش‌ها، Application Pool به‌صورت خودکار و زمان‌بندی‌شده ری‌سایکل می‌شود و دیگر نیازی به انجام دستی آن نخواهید داشت. 🚀

 

دلیل اینکه سایت بالا نمیاد چی هست و دقیقا اپلیکیشن پول چیکار می کنه

 

دلیل بالا نیامدن سایت در IIS و نقش Application Pool

زمانی که یک سایت روی IIS کار نمی‌کند، یکی از رایج‌ترین دلایل مشکلات Application Pool است. برای درک بهتر، ابتدا ببینیم Application Pool چیست و چه کاری انجام می‌دهد.


🔹 Application Pool چیست؟

Application Pool (اپلیکیشن پول) یک محیط ایزوله و مستقل است که وب‌سایت‌ها یا اپلیکیشن‌های وب را اجرا می‌کند. هر Application Pool در واقع یک مجموعه از پردازش‌های (Worker Process - w3wp.exe) مستقل است که درخواست‌های کاربران را پردازش می‌کند.

این جداسازی باعث می‌شود که:

  1. پایداری افزایش پیدا کند (اگر یک سایت کرش کند، روی بقیه سایت‌ها تأثیر ندارد).
  2. امنیت بالاتر برود (سایت‌ها در فضای اختصاصی خود اجرا می‌شوند).
  3. مدیریت منابع بهتر انجام شود (کنترل میزان مصرف رم و پردازنده برای هر سایت).

🔹 چرا Application Pool باعث بالا نیامدن سایت می‌شود؟

چند دلیل اصلی برای این مشکل وجود دارد:

1️⃣ کرش کردن یا Stop شدن Application Pool

🔸 اگر Application Pool به هر دلیلی Crash کند یا Stop شود، سایت‌هایی که به آن متصل هستند نیز از کار می‌افتند.
✅ بررسی وضعیت:

  • در IIS Manager به بخش Application Pools بروید.
  • ببینید آیا Application Pool مربوطه در وضعیت "Stopped" است؟ اگر بله، آن را Start کنید.

🔹 دلایل Stop شدن App Pool:

  • خطاهای زیاد در اپلیکیشن (مثلاً Exceptionهای بدون مدیریت).
  • مصرف بیش از حد منابع (RAM, CPU) باعث کرش می‌شود.
  • مشکلات در Worker Process (w3wp.exe).

2️⃣ مشکل در Worker Process (w3wp.exe)

🔸 w3wp.exe پردازش اصلی است که کدهای سایت شما را اجرا می‌کند. اگر این پردازش به مشکل بخورد، سایت پاسخ نمی‌دهد.

✅ بررسی و دیباگ:

  1. در Task Manager ببینید آیا پردازش w3wp.exe در حال اجراست؟
  2. از Command Prompt دستور زیر را اجرا کنید تا وضعیت Worker Process را ببینید:
  3. اگر پردازش به مشکل خورده، می‌توانید Application Pool را ریستارت کنید:

 

iisreset /restart

3️⃣ رسیدن به محدودیت‌های Application Pool

🔸 در تنظیمات Application Pool مقدار Private Memory Limit و CPU Limit وجود دارد. اگر مصرف حافظه یا پردازنده از این حد فراتر رود، IIS ممکن است App Pool را متوقف یا ری‌سایکل کند.

✅ راه‌حل:

  • به IIS Manager بروید، روی Application Pool موردنظر کلیک کنید.
  • گزینه Advanced Settings را باز کنید.
  • مقدار Private Memory Limit (KB) را بررسی کنید، اگر مقدار کمی دارد، آن را افزایش دهید (مثلاً 0 یعنی نامحدود).

4️⃣ تنظیمات غلط در Recycle Application Pool

🔸 ری‌سایکل شدن ناگهانی App Pool می‌تواند باعث شود که Session کاربران از دست برود و سایت از دسترس خارج شود.

✅ بررسی تنظیمات:

  • در IIS، به Application Pool بروید.
  • در Advanced Settings → Recycling ببینید آیا مقدار Regular Time Interval بیش از حد کم تنظیم شده است؟
  • اگر نیاز ندارید، می‌توانید مقدار آن را حذف کنید.

5️⃣ مشکلات در Connection Strings یا Database

🔸 گاهی مشکل از اتصال به دیتابیس است، نه IIS! اگر دیتابیس از دسترس خارج شود، سایت ممکن است بالا نیاید.

✅ بررسی:

  • در SQL Server بررسی کنید که دیتابیس در حال اجرا باشد.
  • در فایل Web.config ببینید Connection String درست است یا نه.

🔹 نتیجه‌گیری و راه‌حل کلی

1️⃣ بررسی کنید که Application Pool در وضعیت "Started" باشد.
2️⃣ بررسی کنید که Worker Process (w3wp.exe) کرش نکرده باشد.
3️⃣ تنظیمات Recycle را طوری تنظیم کنید که باعث اختلال نشود.
4️⃣ محدودیت‌های RAM و CPU را افزایش دهید.
5️⃣ اگر سایت به دیتابیس متصل است، بررسی کنید که مشکل از SQL Server نباشد.

🚀 با این روش‌ها می‌توانید مشکل را عیب‌یابی و رفع کنید!

 

🚨 خطای IIS: "A worker process failed to stop a listener channel for protocol 'http' in the allotted time."

این خطا معمولاً زمانی رخ می‌دهد که IIS سعی می‌کند Application Pool را متوقف یا ری‌سایکل کند، اما فرآیند Worker Process (w3wp.exe) در زمان مشخص متوقف نمی‌شود.


🔹 دلایل اصلی این خطا

1️⃣ پردازش w3wp.exe قفل شده یا به درستی بسته نمی‌شود

🔸 برخی درخواست‌ها یا Threadهای پردازشی قفل شده‌اند و باعث می‌شوند که فرآیند Worker Process بسته نشود.

راه‌حل:

  • در Task Manager، پردازش w3wp.exe را پیدا کرده و به‌صورت دستی Kill کنید.
  • از Command Prompt (CMD) با دسترسی ادمین این دستور را اجرا کنید:(عدد 9364 همان PID در خطای شماست، مقدار آن ممکن است تغییر کند).
taskkill /F /PID 9364

2️⃣ درخواست‌های طولانی‌مدت (Long Running Requests)

🔸 اگر درخواست‌های وب طولانی باشند (مثلاً پردازش دیتابیس سنگین یا APIهای کند)، فرآیند w3wp.exe درگیر می‌شود و در زمان ری‌سایکل یا Shutdown بسته نمی‌شود.

راه‌حل:

تنظیم Timeout در وب‌سرور را کاهش دهید:
در Web.config:

(عدد 180 یعنی درخواست‌ها بعد از ۳ دقیقه تایم‌اوت می‌شوند).

  

 

بررسی کنید که کوئری‌های دیتابیس بهینه باشند و درگیر Deadlock نشوند.


3️⃣ مشکل در Module یا Handler سفارشی

🔸 اگر یک ماژول، Handler یا DLL خارجی در حال پردازش درخواست‌ها باشد، ممکن است w3wp.exe به درستی بسته نشود.

راه‌حل:

  • در IIS، به مسیر Application Pool > Advanced Settings بروید.
  • مقدار Enable 32-bit Applications را روی False تنظیم کنید (مگر اینکه نیاز باشد).
  • در Event Viewer ببینید آیا ماژول خاصی باعث این مشکل شده است؟

4️⃣ عدم پاسخ‌دهی Application Pool به دستورات IIS

🔸 اگر App Pool دچار Crash یا Hang شود، IIS نمی‌تواند به آن دستور توقف بدهد.

راه‌حل:

  • یک Hard Recycle انجام دهید:

 

iisreset /restart
  • یا Application Pool را به‌صورت دستی Stop و Start کنید.
IIS Recycle سرور server crash کرش

نظرات (0)