ASP.NET 1.1 時代(.NET Framework 1.1),ASP.NET 處理請求由 aspnet_wp.exe (ASP.NET Worker Process) 承載。長時間運行下,未釋放的托管堆、大對象堆碎片、第三方組件泄漏,導致工作進程內存持續增長,最終拖垮整台服務器。雖然 IIS 6 引入應用程序池機制,但在 .NET 1.1 中仍需通過 machine.config 微調 <processModel> 節點來實現資源管控。
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config
尋找 <processModel> 區段,核心屬性調整建議:
| 屬性 | 推薦值 | 說明 |
|---|---|---|
| enable | true | 啟用進程模型管理 |
| timeout | "03:00:00" | 進程最大存活時間(3小時),到期強制重啟,釋放碎片內存 |
| idleTimeout | "00:20:00" | 閒置 20 分鐘無請求則關閉進程,節省資源 |
| memoryLimit | 40 | 佔用物理內存百分比上限(40%),超標觸發回收 |
| requestLimit | 10000 | 處理請求數上限,防止請求洩漏導致無限增長 |
| responseRestartDeadlockInterval | "00:03:00" | 死鎖檢測間隔,自動重啟卡死進程 |
<processModel
enable="true"
timeout="03:00:00"
idleTimeout="00:20:00"
memoryLimit="40"
requestLimit="10000"
responseRestartDeadlockInterval="00:03:00"
/>
aspnet_wp.exe 私有工作集超過物理內存 40%,運行時自動啟動新進程平滑接管新請求,舊進程完成現有請求後退出,實現「零停機」回收。自 .NET Framework 2.0 起,processModel 配置廢棄,轉移至 IIS 應用程序池設置(applicationPool.config / IIS 管理器 GUI):
雖然 .NET 1.1 已停止支援,但理解進程模型配置思想,對排查現代容器化 .NET Core 應用的內存洩漏、配置 Kubernetes liveness/readiness probe 同樣有啟發意義。