iis最大鏈接數和隊列長度

最近公司項目的服務器出現了性能問題,關於iis負載過大,當客戶問到最大鏈接數相關問題形成很萌的感受,就查了相關資料:php

首先讓咱們來看看IIS裏面的這2個數字:最大併發鏈接數,隊列長度。先說這2個數字在哪裏看。html

 

最大併發鏈接數:在IIS中選中一個網站,右鍵網站名稱,在右鍵菜單中找到並點擊【管理網站】->【高級設置】。打開對話框以下圖:數據庫

 

隊列長度:在IIS中選中【應用程序池】,在應用程序池列表中,右鍵你想查看的,在右鍵菜單中選擇【高級設置】。打開以下對話框:windows

 

這兩個數字表面上看是影響咱們站點的併發處理能力的,可是具體是如何影響一個網站的併發處理能力的呢?要徹底理解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利用率只有百分之幾的話,調整這個數值須要特別注意每個工做進程是獨立的應用程序,全局靜態變量不共享。

相關文章
相關標籤/搜索