Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Windows 伺服器「系統分頁池耗盡」導致死機:註冊表調優 PoolUsageMaximum 與 PagedPoolSize 實戰

編輯:關於伺服器

故障現象

  • 伺服器階段性死機、無法遠程連線、服務無響應。
  • 重啟恢復正常,過段時間 (數小時~數天) 復發。
  • 事件日誌大量重複:

Event ID: 2020 (Source: Srv)
伺服器無法從系統分頁池進行配置,因為分頁池當前為空。

Event ID: 333 (Source: System/Registry)
由註冊表引起的 I/O 操作發生不可恢復錯誤。註冊表將無法讀取、寫入或刷新包含註冊表系統映像的檔案。

根因分析

  • Paged Pool (分頁池):核心模式記憶體區域,可分頁至磁碟,存放:檔案物件、註冊表鍵值、Token、進程/線程物件、網路緩衝區等。
  • 32 位 Windows (Server 2003/x86):核心虛擬地址空間僅 2GB (預設),Paged Pool 上限 ~470MB (受 PagedPoolSize 限制)。
  • 記憶體洩漏驅動/服務:不斷分配 Paged Pool 而不釋放 (如舊版防毒過濾驅動、備份 Agent、RAID 監控工具),導致池耗盡。
  • 耗盡後果:
      - 新建檔案/註冊表操作失敗 (Event 2020/333)。
      - 系統服務 (Srv、LSASS、DNS、DHCP) 無法分配核心物件 → 服務掛起/崩潰。
      - 遠程桌面 (TermService) 無法建立會話 → 運維無法登入排查。

註冊表緩解方案 (治標,非治本)

路徑:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

操作步驟

  1. Win+R → regedit。
  2. 定位上述路徑,右鍵新建/修改兩個 DWORD 值。
  3. 重啟伺服器生效。

治本方案:找到並修復洩漏源頭

1. 使用 Poolmon 識別洩漏標籤

# 安裝 Windows Driver Kit (WDK) 或 Windows SDK,獲得 poolmon.exe
poolmon -p  # 顯示 Paged Pool 標籤統計,按 'P' 切換到 Paged Pool,按 'B' 按分配量排序
# 觀察前幾名 Tag (如 "File", "Reg ", "Thre", "MmCa", 自定義驅動 Tag)
# 記下可疑 Tag,對應驅動/服務

2. 驗證可疑驅動/服務

  • 第三方防毒/EDR/Agent → 升級/替換/排除路徑。
  • 備份軟體 (Veeam/Veritas/自研) → 更新版本、調整並發/緩衝區。
  • 硬體監控 (IPMI/RAID/HBA 驅動) → 更新至最新 WHQL 版本。
  • 自研核心模式驅動 → 代碼審計 ExAllocatePoolWithTag / ExFreePool 配對。

3. 升級至 64 位系統 (徹底解決)

  • x64 核心虛擬地址空間 8TB+,Paged Pool 上限數十 GB,幾乎不可能耗盡。
  • Windows Server 2003 x64 / 2008 R2 / 2012 R2 / 2016 / 2019 / 2022 均支援。
  • 若業務允許,遷移至 64 位是一次性解決的最佳路徑。

監控與預警 (納入 Zabbix/Prometheus/Datadog)

# PowerShell 獲取 Paged Pool 使用量
Get-Counter "\Memory\Pool Paged Bytes"
Get-Counter "\Memory\Pool Nonpaged Bytes"

# 關鍵指標
- Pool Paged Bytes / Pool Paged Bytes Peak (接近峰值報警)
- Pool Paged Allocs / Frees (分配釋放不匹配)
- 處理器 \ Pool Paged Bytes (每進程)

告警閾值:Paged Pool 使用 > 70% 最大值 (32位約 330MB) → 立即調查。

總結

Event 2020 + 333 = Paged Pool 耗盡 = 32位系統核心記憶體洩漏。
註冊表調優 (PoolUsageMaximum=40, PagedPoolSize=-1) 可延緩發作、爭取排查時間。
治本 = Poolmon 定標籤 → 找驅動 → 升級/替換/遷移 64位。
納入監控體系,早發現、早修復、不死機。

Copyright © Windows教程網 All Rights Reserved
值名稱類型基數推薦值含義
PoolUsageMaximumREG_DWORD十進制40觸發記憶體管理器修剪的閾值:預設 80% → 改 40%,更早開始回收,緩解耗盡衝擊。
PagedPoolSizeREG_DWORD十六進制0xFFFFFFFF (-1)系統自動計算最大分頁池 (受核心地址空間限制),不人為限制,爭取最大可用空間。