Windows Server 2003 內建一款鮮為人知的小工具 Empty.exe (位於 %SystemRoot%\System32 或支援工具包),專門用於釋放特定處理序的工作集, 將不再主動使用的分頁記憶體交換回磁碟,降低實體記憶體佔用,且不會強制整體系統修剪造成效能抖動。本文詳細說明其用法、適用場景與限制。
工具特性
- 精準釋放:針對單一 PID 或程式名稱,不影響其他處理序。
- 非強制修剪:僅釋放「可捨棄」的分頁 (如已讀取的檔案映射、備份快取),保留作用中工作集。
- 輕量級:無介面、無服務常駐、執行即退出,資源佔用極低。
- 原生相容:僅存在於 Windows Server 2003 / XP Professional x64 / Windows 2000 Resource Kit,較新版本已移除 (改用
EmptyWorkingSet API/SetProcessWorkingSetSize)。
使用語法
Empty.exe // 依處理序 ID 釋放
Empty.exe // 依映像檔名稱釋放 (如 notepad.exe)
實戰操作範例
- 開啟命令提示字元 (建議以系統管理員執行)。
- 查詢目標處理序 PID:
tasklist | findstr "notepad.exe"
假設 PID = 1234。
- 執行釋放:
Empty.exe 1234
或直接按名稱:
Empty.exe notepad.exe
- 觀察工作管理員 → 「記憶體使用量」欄位,該處理序「記憶體使用量」大幅下降,「虛擬記憶體大小」維持不變。



適用場景
- 記憶體洩漏緩解:已知記憶體洩漏的舊版服務 (如舊版 Java 應用、經典 ASP 應用程式集區) 定期釋放工作集,延長重啟週期。
- 大型檔案處理後清理:備份/掃毒/索引服務完成大量檔案讀取後,釋放檔案系統快取佔用的工作集。
- 桌面應用長時間運行:IE 6.0、Outlook 2003 長期開啟產生的分頁堆疊。
- 自動化排程:結合
schtasks / at 每日低峰期執行 Empty.exe * (支援通配符釋放所有使用者模式處理序) 或針對關鍵服務 PID。
限制與風險
- 非萬靈丹:無法釋放非分頁集區、核心記憶體、鎖定頁面、大頁面、共享記憶體區段。
- 效能代價:後續存取釋放頁面需觸發硬性頁面錯誤 (Hard Page Fault) 從磁碟重讀,短暫增加延遲。
- 不支援 64 位元處理序:Win2003 x64 版本
Empty.exe 為 32 位元,無法釋放 64 位元處理序工作集 (需 64 位元版本工具)。
- 系統處理序慎用:勿對
System (PID 4)、csrss.exe、lsass.exe、services.exe 等關鍵系統處理序執行,可能導致系統不穩定。
現代替代方案 (較新 Windows 版本)
- PowerShell:
(Get-Process -Name notepad).WorkingSet = 0 (實際呼叫 SetProcessWorkingSetSize -1,-1)。
- Sysinternals RAMMap:圖形化分析/清空工作集、待命/修改頁面列表。
- Windows Server 2008 R2+:資源管理器 → 效能索引標籤 → 資源監視器 → CPU 索引標籤 → 右鍵處理序 →「分析等待鏈」/ 記憶體管理 API。
Empty.exe 是 Windows Server 2003 時代的精巧工具,雖已退出歷史舞台,但其設計理念 —「精準、非侵入、可自動化」— 仍值得現代運維工程師借鑑。在維護舊版環境時,善用它能有效緩解記憶體壓力,延長服務可用時間。