我有一个ASP.NET Web Api应用程序,其中Entity Framework 6在2个额外的大型实例上运行。
以前是2个大型实例,但过了一段时间后我遇到了IIS 503错误。
问题是:使用此API的应用程序每隔10秒从每个连接的客户端发出请求。我们已经连接了5k个并发客户端,每10秒调用一次api。两个实例的CPU都是40%(我认为它仍然很高)。
现在该应用正在支持负载。但是,我们可以覆盖多达2万个客户,而且我也不知道我还能在代码中改进哪些内容。
每10秒调用一次的方法是异步。
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));
}
}
Windows 2008 IIS 7.5 我改变的唯一IIS设置是队列限制,从500到5000。
我还能做些什么吗?
任何帮助都会非常感激
答案 0 :(得分:1)
您需要更改maxConcurrentRequestsPerCPU。您可以在注册表中设置此密钥,也可以在应用程序配置中进行设置。
<system.web>
<applicationPool maxConcurrentRequestsPerCPU="10000" maxConcurrentThreadsPerCPU="0" requestQueueLimit="10000"/>
</system.web>
你应该真正改变设计,每10秒做5000次请求可能会比你现在做的更好。例如,在输出缓存中缓存结果几秒钟。