IIS/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利用率只有百分之幾的話,調整這個數值需要特別注意每一個工作進程是獨立的應用程序,全局靜態變量不共享。

轉自:https://www.cnblogs.com/youdutec/p/15095773.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章