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

IIS 6.0 Connections_Refused 故障深度剖析:非分頁集區耗盡、Poolmon 定位驅動洩漏、殺毒軟體元兇

     編輯:ASP.NET 基礎

現象與錯誤日誌

  • 網站無法存取,瀏覽器顯示「頁面無法顯示」,含靜態頁面。
  • IIS 服務仍在運行,重啟 IIS 無效,唯有重啟伺服器暫時恢復。
  • httperr 日誌大量出現 Connections_Refused。

根本原因:HTTP.sys 非分頁集區保護機制

當可用非分頁集區記憶體 < 20 MB 時,HTTP.sys 停止接受新連線,回傳 Connections_Refused。非分頁集區位於實體記憶體,不可分頁至磁碟,核心驅動程式大量配置且未釋放即導致耗盡。

微軟官方登錄暫緩方案

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
新增 DWORD:EnableAggressiveMemoryUsage = 1
重啟 HTTP 服務:
  net stop http /y
  iisreset /restart

此設定讓 HTTP.sys 更激進地使用記憶體,僅緩解症狀,未解決洩漏源頭。

核心記憶體觀測:任務管理員 → 效能

  • 正常機器:Non-paged Pool 約 50~100 MB。
  • 故障機器:Non-paged Pool 飆升至 230+ MB,逼近 32 位元 256 MB 上限。

Poolmon 定位洩漏標籤

  1. 安裝 Windows Driver Kit (WDK) 取得 poolmon.exe。
  2. 執行 poolmon -b 依位元組降序排列,找出持續增長的 Tag(如 Thre)。
  3. 查詢驅動檔:findstr /s /m /l "Thre" C:\Windows\System32\drivers\*.sys。

實戰案例中 Thre 對應 rsravmon.sys(瑞星)與 360fs.sys(360衛士),確認為殺毒軟體驅動洩漏。

解決與驗證

  1. 移除瑞星、360衛士,重啟伺服器。
  2. 重新安裝 360 杀毒/衛士最新版。
  3. 觀察 10+ 天,Non-paged Pool 穩定在 50 MB 以內,故障不再復發。

其他可能原因

  • 應用程式 Socket 僅 Accept 不 Receive,客戶端持續傳送資料導致核心緩衝堆積。
  • 第三方檔案系統過濾驅動、備份軟體驅動洩漏。

總結

Connections_Refused 是 HTTP.sys 保護機制的表象,真兇通常是核心模式驅動程式非分頁集區洩漏。Poolmon + findstr 是定位元兇的標準組合拳。生產環境建議:
1. 僅安裝必要的殺毒/防護軟體。
2. 定期監控 Non-paged Pool 趨勢(PerfMon Counter: Memory\Pool Nonpaged Bytes)。
3. 驅動程式保持最新版本。

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