Windows Server IIS ASP.NET網站參數優化設定說明

Windows Server在安裝完成IIS後,有許多設定都偏向保守,在這裡建議把一些設定調整一下,可以讓你的IIS網站更優化、效能更佳喔!這篇文章我會將其列為長期維護的項目,所以日後如果我有遇到其他方面的設定,我會回來持續維護這篇文章的內容。

※ 請注意:文章撰寫當下的時間為2017年,IIS版本已經來到10.0版,所以如果有某些設定參數不在你的IIS之中,這代表你用的那個版本還沒有釋出這個參數設定喔。

選擇應用程式集區(Application Pool)

Step 1. 首先請去觀察你要調整的站台,被託管在哪一個集區之內?

Step 2. 點選應用程式集區>點選該項名稱>點選右鍵>選擇「進階設定」。

IIS網站相關參數設定

佇列長度

當Client端發出Request到Server,當佇列(Queue)超過1000後,第1001個Request會被直接送出「HTTP Status 503 Service Unavailable」。請依照你的伺服器能力調整,一般來說2000這個數據屬於可以接受的範圍,如果調整的量太大,那你就要考慮可能會引發資源鎖定造成的死結問題。

啟動模式

早期的IIS,基於當時機器能力、Windows NT系統尚未完善、IIS體質為健全...等的問題,因此留有很多回收機制的思維在裡面,以防止Memory Leak的問題發生進而造成整個網站運作崩潰。

這個設定就是在說明,當應用程式集區被回收後,第一次重新執行(啟動模式)放在哪個時機點?

  1. OnDemand:當第一個Request傳入時再啟動。
  2. AlwaysRunning:當網站被回收後,會立即重啟應用程式集區。

固定時間間隔

誠如之前所論述,IIS對於回收機制做的實在很完善(人謂:不能執行的話,重開機就好),但是以現在Windows Server + IIS + ASP.NET的成熟度,其實要把程式寫到當機的機率實在很低(.NET內建GC機制),因此這邊建議把原本預設的1740分鐘設定成0分鐘,也就是永遠不需要固定時間去回收應用程式集區。

※ 為何是1740分鐘(29小時)?微軟親自向您說分明。

如果你實在不想找自己的麻煩,建議增列一個「特定時間」來進行回收,是一個蠻不錯的做法,建議在TimeSpan[]陣列中,增列一個04:00:00,這代表在凌晨四點的時候,IIS會自己起來對應用程式集區進行回收。

快速失敗保護

當你的應用程式在N分鐘(失敗間隔)內發生M個錯誤(最大失敗數目),這時候IIS就會啟動機制幫你發出HTTP 503錯誤,而你可以選擇是要採用HTTPLevel錯誤等級發送,還是TCPLevel錯誤等級發送。

這個機制有好有壞,如果你ASP.NET程式設計經驗已經很成熟(網站很穩定),其實大可關閉掉(已啟用:False)這一項保護。

閒置逾時與閒置逾時動作

IIS會觀察你的網站在N分鐘內沒有動作(閒置逾時),就把你的應用程式集區做某些處理,真的是很嚴謹啊!這個設定就是傳說中的我的網站一段時間沒人上線後,開始再度使用時就會變得卡卡的原因。設置有兩種,建議選擇0分鐘,動作選擇Suspend吧!時間N如果選擇零(ZERO),代表不終結也不凍結喔!

  1. Terminate:直接把你的應用程式集區終結掉。
  2. Suspend:應用程式集區凍結起來,釋放CPU以及用不到的記憶體。

關閉時間限制

如果你的Web應用程式有超長運行的需求,理論上你應該使用執行緒、服務等相關的方法來運作,然後透過AJAX或於某個時間間隔後再回來查看結果。但如果你真的不想透過這些常規性的做法來完成長時間的運算作業,而想要選擇直接開啟更長時間的運算等候時間,那麼,改變觀變時間限制是你最佳的選擇。(預設為90秒;3分鐘)

輸出快取處理

這個選項放在「IIS主機」>「輸出快取處理」>「編輯功能設定」裡面。

這一項就是整個IIS核心在處理快取時的相關機制參數設定處,如果你要快取的效率更高一點,也就是超過256KB(262144 Bytes)也可以被保留在快取裡面,那就改一下設定變成10MB(10485760 Bytes;10M * 1024K * 1024Bytes)。

HTTP回應標頭

這個選項放在「IIS主機」>「HTTP回應標頭」>「設定一般標頭」裡面,我自己也很常常忘了放在哪裡。

這個選項裡面有兩大重點,一個是設定HTTP Keep-Alive,優化HTTP的傳輸效率。另外一個是設定靜態內容自動輸出的「Cache-Control:max-age=」時間,一般如果網站已經起來成熟運作,建議「網頁內容到期」設定成「之後」、「365日」為佳。

WindowsServer IIS Performance Tuning Optimizing