iis最大串連數和隊列長度,iis數和隊列長度
首先讓我們來看看IIS裡面的這2個數字:最大並發串連數,隊列長度。先說這2個數字在哪裡看。
最大並發串連數:在IIS中選中一個網站,右鍵網站名稱,在右鍵菜單中找到並點擊【管理網站】->【進階設定】。開啟對話方塊如:
隊列長度:在IIS中選中【應用程式集區】,在應用程式集區列表中,右鍵你想查看的,在右鍵菜單中選擇【進階設定】。開啟如下對話方塊:
這兩個數字表面上看是影響我們網站的並發處理能力的,但是具體是如何影響一個網站的並發處理能力的呢?要完全理解IIS的並發處理能力,除了這2個數字,實際上還有一個非常關鍵的數字:IIS最大並發背景工作執行緒數。
1. IIS最大並發背景工作執行緒數
在以前很長一段時間,我一直以為IIS的【最大並發串連數】就是影響IIS最大並發背景工作執行緒數。我以為將【最大並發串連數】設定為1萬,那麼當1萬個請求同時到來的時候,IIS會開啟1萬個線程進行處理,如果同時到來2萬個請求,由於最大並發串連數只有1萬,那麼剩餘1萬個請求就會放在隊列裡面,當前面的1萬個線程中某個完成了請求之後,再從隊列裡面取一個請求。但,這個理解是完全錯誤的,相信很多朋友也跟我有同樣的理解。
現在,首先讓我們來理解什麼是【IIS最大並發背景工作執行緒數】。這個數字在IIS裡面是沒有介面進行設定的,我以前根本就不知道有這個數字。這個數字跟作業系統相關,我的win7系統的IIS的值是10,VS2012內建的IIS Express的值是80。對於windows伺服器版本的系統的具體值是多少沒有測試過,但我猜應該也是有限制的。
這個數字到底是什麼意思呢?回到上面舉的例子,當1萬個請求同時進入IIS的時候,由於win7系統的IIS只有10個背景工作執行緒,那麼這時1萬請求中只有10個請求會在第一時間被處理,剩餘9990個請求都需要排隊。也就是說,IIS最多能夠安排10個線程同時處理請求(win7版本的IIS,有的可能是20)。
所以,如果你用自己的win7系統測試IIS的效能的時候,你可能發現,不管你怎麼設定【最大並發串連數】,你的IIS處理能力都很有限。
2. 最大並發串連數
上面講的IIS最大並發背景工作執行緒數,看上去就是IIS的並發處理能力,如果是這樣,那麼【最大並發串連數】有什麼意義呢?
還是上面的例子,如果1萬個請求同時到來,而我們的win7系統的IIS最大並發背景工作執行緒數只有10,這時如果將【最大並發串連數】設定為100,會有什麼效果呢?答案是:只有100個請求會收到正常響應,剩餘9900個請求直接返回503(服務不可用)的錯誤。這時,實際上進入排隊等待的只有90個請求。
再換下測試參數,如果將【最大並發串連數】設定為5000,又會有什麼效果?答案你可能已經知道了,那就是一開始就有5000個請求直接返回503,剩下5000個請求慢慢正常返回。
這裡你看明白了吧,【最大並發串連數】在我們的測試例子中,影響到了排隊的數量。這樣的話,看上去【隊列長度】又不知道什麼意思了?
3. 隊列長度
在上面的例子中,如果1萬個請求同時到來,【最大並發串連數】設定為100。這時我們知道,IIS首先會安排那10個線程去處理10個請求,剩下90個請求都需要排隊。這時如果我們將【隊列長度】設定為50,那會出現什麼情況?答案是,40個請求會直接返回503服務停用錯誤(因為隊列只有50個的長度,剩下的40個就無法排隊了),最終只有60個請求會被正確處理。
讀到這裡,你明白了嗎?
結論
當很多請求同時到來的時候,IIS會根據【最大並發串連數】來判斷是否有多餘的請求,多餘的請求直接返回503,然後再根據【隊列長度】來判斷是否有多餘的請求排不了隊,排不了隊的也直接返回503。所以,如何設定【最大並發串連數】和【隊列長度】,實際上是有公式可以計算的:
最大並發串連數 = 隊列長度 + IIS最大並發背景工作執行緒數
最後再說說IIS的預設值對我們網站並發處理能力的影響。IIS預設的【最大並發串連數】為4294967295(42億多),而【隊列長度】預設值為1000。對於windows server版本的IIS,最大並發背景工作執行緒數可能幾百(猜測,可能沒有限制),按照這個預設值,那麼IIS同時處理的請求數也就1000多。1000多這個數字才是IIS真正的並發處理能力,而這個能力跟我們的代碼沒有關係。那麼哪些指標是評判我們網站的處理能力的呢?最重要的指標可能莫過於【每秒處理請求數】吧(在效能分析器裡面可以查看),這個數字也叫吞吐率。如果每個請求處理速度非常快,那麼那麼網站吞吐率就大,吞吐率大那麼支援的同時線上人數就大。如果要做秒殺,那就看你的秒殺相關的URL支援多大的吞吐率吧。瞭解了這麼多指標,還沒有涉及到CPU的計算能力。CPU的計算能力是如何影響網站的處理能力的呢?還是那麼多請求,如果CPU很強大,能夠縮減每個請求的處理時間,那必然會提高吞吐率。還有很多的請求,如果花在網路傳輸或者到資料庫的傳輸時間比較多,這部分等待時間CPU是閑置的,如果能夠提高CPU的利用率,也可能提高網站的處理能力,最充分的利用伺服器的資源。如果不想改代碼而想提高CPU利用率,可以在IIS的應用程式集區中設定最大背景工作處理序數(預設值為1),可以設定為10如果當前CPU利用率只有百分之幾的話,調整這個數值需要特別注意每一個背景工作處理序是獨立的應用程式,全域靜態變數不共用。