繁体   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