長時間運行的 ASP/ASP.NET 應用程式常因記憶體洩漏、未釋放的非受控資源、靜態物件累積導致 w3wp.exe 進程記憶體/CPU 持續增長,手動重啟網站雖能暫時恢復,但非長久之計。IIS 6.0 引入應用程式集區自動回收機制解決此問題。
w3wp.exe,各對應一個活躍集區。
任務管理器:兩個 w3wp.exe 分別對應 KefuAppPool 與 ReportServer 集區
cscript iisapp.vbs (或 iisapp -a)。W3WP.exe PID: 3232 AppPool: KefuAppPoolW3WP.exe PID: 3572 AppPool: ReportServer
重疊回收示意:回收期間新舊進程共存,舊進程處理完現有請求後退出
| 觸發條件 | 預設值 | 優點 | 缺點 | 建議 |
|---|---|---|---|---|
| 固定時間間隔 | 1740 分鐘 (29 小時) | 簡單固定 | 無法對應實際負載高峰/低峰 | 不建議單獨使用 |
| 請求數量 | 無限制 | 依流量觸發 | 請求輕重不一,無法反映資源壓力 | 輔助參考 |
| 排程時間 (每日固定時刻) | 無 | 可安排在離峰 (如 03:00) | 無法應對突發記憶體暴增 | 建議啟用 作為基準回收 |
| 記憶體限制 (虛擬/私人記憶體) | 無限制 | 直接對應資源耗盡風險 | 閾值難設:太小頻繁回收,太大失去保護 | 核心防護,需依實測峰值設定 (如私人記憶體 800MB) |
ShutdownTimeLimit (預設 90 秒) 控制舊進程最大優雅關閉等待時間。機制: IIS 回收集區後,新工作進程啟動,但只有收到第一個 HTTP 請求時 才會觸發 Application_Start。若網站長時間無訪問 (如夜間),排程任務、快取預熱、定時器初始化等邏輯不會執行。
applicationHost.config 設定 preloadEnabled="true" + startMode="AlwaysRunning",配合 <applicationInitialization> 指定預熱頁面。curl https://site/warmup.aspx 觸發 Application_Start。Lazy<T> 延遲初始化模式。