最近公司項目的服務器出現了性能問題,關于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利用率只有百分之幾的話,調整這個數值需要特別注意每一個工作進程是獨立的應用程序,全局靜態變量不共享。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
