簡體   English   中英

IIS7集成管道:maxConcurrentRequestsPerCPU和requestsQueueLimit設置之間的交互

[英]IIS7 Integrated Pipeline: Interaction between maxConcurrentRequestsPerCPU and requestsQueueLimit settings

首先,有一個很好的概述IIS7 HTTP請求生命周期和影響性能的各種設置:

IIS 7.0和6.0上的ASP.NET線程使用情況

盡管如此,在dotNet 4中, maxConcurrentRequestsPerCPUrequestsQueueLimit的默認值設置為5000.例如,相當於:(在aspnet.config中):

<system.web>
   <applicationPool 
      maxConcurrentRequestsPerCPU="5000" 
      maxConcurrentThreadsPerCPU="0" 
      requestQueueLimit="5000" /> (** see note below)
</system.web>

在我看來,在多CPU /核心服務器上,在'perCPU'限制之前,始終會調用requestQueueLimit。 因此,如果每個CPU最多需要5000個請求,那么我希望requestQueueLimit需要增加到5000 * CPUCount或者只是完全禁用。

我的解釋是否正確? 如果是這樣,我可以禁用requestQueueLimit嗎? (將其設為零?)。 關於此設置的文檔似乎沒有解決這個問題(所以我可能會遺漏某些內容或誤讀?)

**上述文章的旁注:requestQueueLimit命名不佳。 它實際上限制了ASP.NET可以同時處理的最大請求數。 這包括排隊的請求和正在執行的請求。 如果“請求當前”性能計數器超過requestQueueLimit,則將拒絕新的傳入請求,並顯示503狀態代碼)

***我的解釋是否正確?

是的,如果要同時執行超過5000個請求,則需要增加requestQueueLimit。 requestQueueLimit限制系統中的請求總數。 由於其遺留問題,它實際上是系統中的請求總數,而不是某些隊列中的請求數。 它的目標是防止服務器由於缺少物理內存,虛擬內存等而翻倒。當達到限制時,傳入的請求將收到快速的503“服務器太忙”響應。 順便說一下,“ASP.NET \\ Requests Current”性能計數器公開了系統中當前的請求數。

***我可以禁用requestQueueLimit嗎? (設為零?)

您可以通過將其設置為較大的值(如50000)來有效地禁用它。您必須在aspnet.config文件中設置該值我懷疑您的服務器可以處理50000個並發請求,但如果是,則將其加倍。 將其設置為零不會禁用它...奇怪的是,這意味着不能同時執行多個請求。

順便說一句,看起來v4中有一個bug。 對於集成模式,如果在aspnet.config文件中配置requestQueueLimit,它只會成功讀取它的值,如MSDN所述 出於某種原因,當我在一段時間之前嘗試使用它時,v4並沒有從machine.config中讀取它。

您可能想要檢查應用程序的源代碼。 IIS調優器是一個開源應用程序,它可以優化IIS設置以獲得更好的性能。 另一方面, 頁面可能對您的問題很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM