上篇看過了 Site 的 Advance Setting,這篇要來討論 Application Pool 的 Advance Setting。也因為 Application Pool 的設定其實會直接關連到起來的 Process 的生命週期跟形式,很多設定其實都會影響 Application 本身的效能,算是很重要的部分。關於 Best Practice (註:第一次看到這個詞的同學,可以想做是典範的規範設置,通常由具經驗的人或官方給出的標準模板) 我們後面會開一篇來講,這篇會以講各個設定的對照為主。
一樣點選左側選單上的 Application Pool,接著選擇你要設置的 Application Pool,右側點選 Advance Setting 就能開啟對應 Application Pool 的設定。
我們直接拆成一個一個段落來講,第一個段落是 General,和 Site 一樣有部分的 Basic Setting 重複在這段裡面。多出來的分別是 Enable 32-Bit Applications、Queue Length、Start Mode。
Enable 32-Bit Applications 關係到 Application Pool 本身以 32-Bit 或 64-Bit 運行,除非你對你的環境下運行的模組都足夠熟悉,否則任意變更這個設置可能會導致 App 起不來,因為不是所有模組都相容兩種模式。
Queue Length 是允許這個 Application Pool 在 Http.sys 層面裡滯留的 Request 總數,如果 Queue 滿了情況下,會引發 503 的錯誤。這時的觸發並未觸碰到 IIS,相關的錯誤會寫在 C:\Windows\System32\LogFiles\HTTPERR 裡。基本上關係到 App 的常時流量跟處理速度,數值沒有一個統一的建議,通用一點就是設置為常時使用者人數的 1.5 倍。
Start Mode 指的是針對這個 Application Pool 起 Process 的時機,只有兩個選項 OnDemand 和 AlwaysRunning。如果設定為 OnDemand,只有當第一個 Request 進來的時候,Process 才會被起起來,對一些起來時費時比較久的 App 來說,也許 AlwaysRunning 是個用戶體驗好些的選擇。AlwaysRunning 會讓 Process 持續存在,就算被回收了也會長新的出來。缺點就是相對記憶體會被特定的 Process 持續占用,無論有無使用者在嘗試存取。
CPU 這段是設置和 Application Pool 相關的 。調整時機更傾向於當你要做測試的時候。我們簡單拆上下兩部分看,一個是關於 Limit,一個是關於 Processor Affinity。
Limit 的第一個值是設定關於 CPU 在下面那個 Limit Interval 的時間單位內,最高能佔到的 CPU %數(可以點上去注意設定的單位),不想設定的話,寫為 0 表示不啟用這個功能。在有啟用的狀況下,如果過了這個 % 數,會依照 Limit Action 的設定來做事情,Action 的可能行為有:NoAction,KillW3wp,Throttle,ThrottleUnderLoad。NoAction 不會對 Process 本身做任何事情,只會在 Event Log 裡寫下對應的 Warning;KillW3wp 則是在到達設定值的時候直接停止 W3wp 的 process。其餘兩個效能限縮(Throttle)是讓 CPU 不超過設定值的功能,也就不吃 Limit Interval,差別是 UnderLoad 只有在 CPU 爭用(Contention on the CPU)的狀況下才會去做 Process 的效能限縮。
Processor Affinity 其實是個作業系統層面的概念,僅用於多個 Processor 的狀況。Affinity 這個詞是姻親 / 親和力的意思,整個名詞表達的是想讓 Process 盡量執行於特定的 Processor 上。我自己是沒特別用過,在同一個 Processor 上處理的好處是有同樣處理數據殘留可能會讓執行速度加快;一般不太需要特別做設定,知道有這個功能就可以了。
Process Orphaning 偏向用來留下除錯線索的功能,Orphaning 是孤兒的意思,這個功能是當 Process 發生問題的當下,不會直接 Kill Process,新的 Process 依然會先起,但舊的會留到一旁隔離(Orphaning)。被留下來的 Process 會做什麼呢?會去執行 Executable 裡寫下的 Command,比如針對該 Process 做 Dump 以利後續除錯能有當下狀態能夠查看。Executable 寫執行程式命令,Executable Parameters 寫執行參數。
大家看到上面這個小 Section 的時候是不是疑惑我有漏XD?沒錯,IIS UI 順序上本來再來應該是 Process Model,但相對會比較長,所以先講個短短的 Process Orphaning,避免文章太長,下半拆到下篇,下篇繼續和大家分享剩下的 Application Pool 的 Advance Setting。