Asp.net

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

  • March 17, 2011

首先,這裡對 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/核心伺服器上,這裡的 requestQueueLimit 總是會在“perCPU”限制之前被呼叫。因此,如果每個 CPU 最多 5000 個請求是您真正想要的,那麼我希望 requestQueueLimit 需要增加到 5000 * CPUCount 或完全禁用。

我的解釋正確嗎?如果是這樣,我可以禁用 requestQueueLimit 嗎?(將其設置為零?)。此設置的文件似乎沒有解決這個問題(所以也許我遺漏了一些東西或誤讀了?)

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

***我的解釋正確嗎?

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

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

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

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

引用自:https://stackoverflow.com/questions/4737612