錯誤現象
瀏覽網站顯示 Service Unavailable (HTTP 503),重新整理幾次可能恢復,或持續顯示。
三大核心成因類型
類型一:應用程式集區自動停用 (最常見)
徵兆: 事件日誌 (系統/應用程式) 記錄:
「應用程式集區 'XXX' 已自動停用,因為為其提供服務的背景程序發生一連串錯誤。」
或
「應用程式集區 'XXX' 超過其作業限制設定。」
原因:
- 網站程式佔用過多 CPU/記憶體資源 (如死迴圈、未優化查詢、大量 Session)。
- 程式頻繁拋出未處理例外,觸發快速失敗保護 (預設 5 分鐘內 5 次失敗停用集區)。
- 集區設定「私人記憶體限制」過低 (預設無限制,但若誤設過小易觸發)。
自動恢復: IIS 預設 30-90 秒嘗試重啟集區,故重新整理幾次可能恢復。
類型二:IIS 連線數限制觸發 (Windows Server 2003 特有)
- Win2000 顯示「連線過多,請稍後再試」。
- Win2003 直接顯示 Service Unavailable (無明確連線數錯誤訊息)。
- 網站屬性 → 「網站」標籤 → 「連線」區域 → 若勾選「限制連線數」且值過小 (預設無限制),高併發時觸發。
類型三:Access 資料庫引擎災難性故障 (連鎖效應)
場景: 多站點共用同一應用程式集區,其中一站使用 Access (Jet/ACE) 資料庫。
- Access 引擎在高併發/大資料量下易發生「災難性故障」或「未將物件參考設定為物件實例」。
- 引擎掛掉導致整個 w3wp.exe 進程不穩定,觸發集區停用,波及同集區所有網站 全部變 Service Unavailable。
解決: 使用「伺服器醫生」或 Jetcomp.exe 壓縮修復 .mdb 檔案,或遷移至 SQL Server/LocalDB。
SharePoint 專屬成因
- 虛擬伺服器應用程式集區未正確配置 (預設
MSSharePointPortalAppPool)。
- 集區身分識別密碼過期/錯誤 (需手動同步更新)。
- 集區帳戶非
IIS_WPG 與 STS_WPG 群組成員。
- 解決:驗證集區設定 → 更新密碼 → 確認群組隸屬 →
iisreset。
主機商視角:資源配額與監控機制
共享主機環境典型架構:
- 30-50 網站共用一應用程式集區 (資源池)。
- 集區限制:CPU ≤ 60%、記憶體 ≤ 200 MB。
- 單一網站佔滿資源 → 集區停止 → 所有共用網站 Service Unavailable。
- 主機商部署自動監控:每 10 分鐘檢查集區狀態,停用則自動重啟 (2-5 分鐘恢復)。
用戶端應對指南
- 出現 Service Unavailable → 等待 5-10 分鐘重新整理 (自動恢復機制)。
- 頻繁發生 (每天多次) → 聯繫主機商技術支援,排查同集區異常網站。
- 非伺服器癱瘓 (FTP、控制台、其他集區網站正常) → 屬資源配額保護機制,非硬體故障。
開發者預防最佳實踐
- 啟用自訂錯誤頁 (
web.config <httpErrors>) 友善提示用戶。
- 程式碼審查:避免死迴圈、大量記憶體分配、同步阻塞 I/O。
- 資料庫優化:索引、分頁、快取、讀寫分離。
- 避免 Access 做高併發生產資料庫,改用 SQL Server/MySQL/PostgreSQL。
- 設定集區「定期回收」 (如每日 03:00) 釋放記憶體碎片。
- 啟用「快速失敗保護」調整閾值 (如 10 分鐘 10 次) 避免誤觸發。