簡體   English   中英

高負載下的 ASP.Net Core 線程飢餓

[英]ASP.Net Core Thread Starvation in high load

我們正在將大型代碼庫從 .Net Framework 4.7.2 ASP.NET 遷移到 .NET 6 ASP.NET 核心(托管在 IIS 10)。

不幸的是,我們注意到在高負載情況下出現了回歸。 ASP.NET 能夠從負載峰值中恢復,而 ASP.NET Core 進入線程飢餓狀態,只有在負載減少時才能恢復,即便如此也需要幾分鍾時間。 由於 Oracle 沒有提供真正的異步 API,我們的大部分代碼庫都是同步運行的。

我們目前對差異的假設是 ASP.NET (?) 中存在的缺失默認請求隊列。 天真的方法是引入速率限制中間件,但硬編碼允許的並發請求數似乎有問題。 有沒有辦法配置 ASP.NET 核心,以便它在接近線程飢餓時開始節流/速率限制請求的數量?

我們假設我們需要這樣的東西: https://referencesource.microsoft.com/#System.Web/RequestQueue.cs,8

我們在這個 github 問題中收到了很好的情報: https://github.com/do.net/as.netcore/issues/45277#issuecomment-1327156897

我們關於 ASP.NET 和 ASP.NET Core 之間節流差異的假設是正確的,因此有必要構建您自己的節流中間件,升級到 ASP.NET Core 7 或使用開源解決方案。 ASP.NET + IIS 的默認值為:

- System.Web request queue - 5000 * number of CPUs (setting is called maxConcurrentRequestsPerCPU)
- IIS concurrent request limit - 5000 (appConcurrentRequestLimit)
- HTTP.sys queue - 1000 (https://learn.microsoft.com/en-us/windows/win32/http/configuring-properties-in-http-version-2-0?redirectedfrom=MSDN)

暫無
暫無

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

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