Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

IIS 效能調校十大禁忌:記憶體、快取、執行緒、緩衝區、壓縮全方位解析

編輯:系統常見問題解答

IIS 效能不佳多源於預設值不適合生產負載或開發習慣移植到伺服器。以下十大禁忌與對應最佳實務:

  1. 禁忌:頻繁配置/釋放大量小物件
    → 最佳:物件集區、ArrayPool<T>、MemoryPool、大型物件堆 (LOH) 避免碎片。啟用 gcServer=true (ASP.NET Core) / `` (ASP.NET Framework)。
  2. 禁忌:忽略 CPU 快取行 (Cache Line) 效應
    → 最佳:熱資料結構對齊 64 位元組、struct 取代 class 減少指標追蹤、避免 false sharing([ThreadStatic] 或 ThreadLocal<T>)。程式碼空間局部性優於時間局部性,編譯器優化選「大小」而非「速度」。
  3. 禁忌:過度快取導致記憶體壓力
    → 最佳:IMemoryCache 設定 SizeLimit、ExpirationTokens、定期 Compact()。快取命中率 < 80% 即檢視移除策略。
  4. 禁忌:盲目增加執行緒數
    → 最佳:非同步 I/O (async/await) 釋放執行緒、ThreadPool 自動調節、MaxConcurrentRequestsPerCPU (ASP.NET) / MaxConcurrentRequests (Core) 設定合理上限。Context Switch 成本極高,且汙染 L1/L2/L3 快取。
  5. 禁忌:使用 CGI / 同步阻塞呼叫
    → 最佳:FastCGI (PHP)、ASP.NET Core Kestrel + IIS 整合管線、gRPC/HTTP/2 多工連線。
  6. 禁忌:未啟用 HTTP Keep-Alive
    → 最佳:IIS 管理員 → 網站 → 進階設定 → 「連線逾時」≥ 120 秒、system.webServer/httpProtocol 允許 Keep-Alive。可提升 15~20% 輸送量。
  7. 禁忌:啟用詳細記錄 (W3C/ODBC) 且不輪替
    → 最佳:生產環境僅記錄錯誤/效能指標、每日輪替、壓縮封存、串流至 Log Analytics/ELK。關閉 ODBC Logging。
  8. 禁忌:靜態內容未壓縮
    → 最佳:<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"> 啟用 dynamicCompressionBeforeCache="true"、staticTypes 包含 js/css/json/svg/woff2、dynamicTypes 包含 application/json。可減 60~80% 傳輸量。
  9. 禁忌:ASP 偵錯旗標保持開啟
    → 最佳:<compilation debug="false">、<httpRuntime fcnMode="Disabled">、移除 trace.axd、elmah.axd 等偵錯端點。
  10. 禁忌:單一應用程式集區承載所有網站
    → 最佳:每網站獨立 AppPool、身分識別使用 ApplicationPoolIdentity、.NET CLR 版本隔離、啟用「快速失敗保護」(rapidFailProtection="true" failureInterval="00:05:00" maxFailures="5")。

效能基準建議值 (參考)

設定建議值
應用程式集區佇列長度5000~10000
CPU 限制0 (不限制) / 依授權核心數設定
私用記憶體限制0 (不限制) / 視實體 RAM 留 20% 給 OS
閒置逾時0 (不回收) / 固定排程回收 (如 03:00)
定期回收1740 分鐘 (29 小時) 錯峰避開固定時段

調校後必跑負載測試 (wrk、k6、JMeter、NBomber) 比較 Before/After:RPS、P99 延遲、錯誤率、CPU/記憶體曲線。

Copyright © Windows教程網 All Rights Reserved