Asp.net Web Api实体框架6高CPU使用率和应用程序挂起
我有一个ASP.NET Web Api应用程序,其中Entity Framework 6在2个超大的os AWS实例上运行 之前有两个大型实例,但过了一段时间后,我遇到了IIS 503错误 问题是:使用此api的应用程序每10秒从每个连接的客户端发出一个请求。我们已经连接了5k个同步客户端,每10秒调用一次api。两个实例的cpu都是40%(我认为仍然很高) 现在应用程序支持加载。然而,我们可以接触到多达2万个客户,我不知道在代码中还有什么可以改进的地方 每10秒调用一次的方法是异步的Asp.net Web Api实体框架6高CPU使用率和应用程序挂起,asp.net,performance,entity-framework,iis,asp.net-web-api,Asp.net,Performance,Entity Framework,Iis,Asp.net Web Api,我有一个ASP.NET Web Api应用程序,其中Entity Framework 6在2个超大的os AWS实例上运行 之前有两个大型实例,但过了一段时间后,我遇到了IIS 503错误 问题是:使用此api的应用程序每10秒从每个连接的客户端发出一个请求。我们已经连接了5k个同步客户端,每10秒调用一次api。两个实例的cpu都是40%(我认为仍然很高) 现在应用程序支持加载。然而,我们可以接触到多达2万个客户,我不知道在代码中还有什么可以改进的地方 每10秒调用一次的方法是异步的 publ
public async Task<ExampleContract> Post(ExampleRequest example)
{
try
{
return await _localizacaService.ExampleAsync(example);
}
catch (DataException ex)
{
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message));
}
}
公共异步任务发布(示例请求示例)
{
尝试
{
return await\u localizacaService.exampleAscent(示例);
}
捕获(DataException ex)
{
抛出新的HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest,ex.Message));
}
}
Windows 2008
IIS 7.5
我唯一更改的IIS设置是队列限制,从500到5000
还有什么我能做的吗
如果您需要更改maxConcurrentRequestsPerCPU,我们将非常感谢您的帮助。您可以在注册表中设置此项,也可以在应用程序配置中设置
<system.web>
<applicationPool maxConcurrentRequestsPerCPU="10000" maxConcurrentThreadsPerCPU="0" requestQueueLimit="10000"/>
</system.web>
你真的应该改变设计,每10秒发出5000个请求可能比现在处理得更好。例如,在输出缓存中缓存结果几秒钟。Hello peer。在发布了这个问题之后,我发现了这个链接,其中详细介绍了你所说的:我知道,在这么短的时间内提出这么多的请求是不可取的。我需要尽快寻找替代方案,比如web套接字。您认为将maxConcurrentRequestsPerCPU和requestQueueLimit设置为10000(默认大小的两倍)合理吗?我问是因为我还没试过。实际上,我添加了第三个实例,它现在正在工作。但我们需要尽快尝试。再次感谢你。