首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

IIS 應用程式池頻繁崩潰排查:HTTP.sys 錯誤日誌分析與常見成因

     編輯:關於ASP.NET

IIS 應用程式池 (AppPool) 頻繁自動回收/崩潰,嚴重影響服務可用性。本文說明如何定位 HTTP.sys 錯誤日誌、解讀關鍵錯誤碼、常見成因與排查步驟。

關鍵日誌位置

C:\WINDOWS\system32\LogFiles\HTTPERR\httperr_YYYYMMDD.log

此為 HTTP.sys 核心層記錄,早於 IIS 處理管線,能捕捉 AppPool 未啟動、佇列滿、連線重置等底層錯誤。

常見錯誤碼與含義

錯誤碼名稱典型成因
503Service UnavailableAppPool 停止、啟動失敗、佇列滿、Rapid Fail Protection 觸發
400Bad Request請求標頭過大、異常字元、HTTP.sys 限制
401Unauthorized驗證失敗、Kerberos/NTLM 協商問題
Connection_Dropped / Connection_Abandoned連線中斷客戶端主動斷開、負載均衡器健康檢查、防火牆超時
Timer_ConnectionIdle閒置超時HTTP.sys connectionTimeout 觸發

排查步驟

  1. **確認 AppPool 狀態**:IIS 管理員 → 應用程式池 → 狀態是否為 Started,啟用「啟動模式: AlwaysRunning」。
  2. **檢查事件檢視器**:系統日誌 → Source: WAS / IIS-W3SVC / .NET Runtime,尋找 Event ID 5002, 5011, 5189 等。
  3. **啟用失敗請求追蹤 (FREB)**:`` 捕捉 503 完整管線堆疊。
  4. **分析 HTTPERR 日誌**:以時間對齊崩潰點,關注 503、AppOffline、QueueFull 關鍵字。
  5. **檢查 Rapid Fail Protection**:AppPool 進階設定 → 「快速失敗保護」(預設 5 分鐘 5 次失敗即停用),調整或暫停以觀察根因。
  6. **記憶體/CPU 壓力**:效能監視器觀察 w3wp.exe 私有記憶體、Gen2 GC、ThreadPool 佇列長度。
  7. **程式碼層面**:未處理例外、靜態物件洩漏、同步死鎾、大物件堆 (LOH) 碎片、資料庫連線洩漏。

常見根因速查表

  • Web.config / 機器配置錯誤導致啟動失敗 → 事件日誌 5002/5011。
  • 應用程式啟動耗時過長超過 startupTimeLimit (預設 90s) → 增加限制或優化啟動邏輯。
  • 非受控代碼 (COM、P/Invoke) 導致進程崩潰 → 捕捉 Dump 分析 (DebugDiag/ProcDump)。
  • 資料庫連線池耗盡、死鎖、長時間查詢阻塞執行緒 → 檢查連線字串 Max Pool Size、查詢優化。

系統性排查:日誌 → 事件 → 追蹤 → Dump → 程式碼修復 → 壓測驗證。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved