Web Api实体框架6高CPU使用率和应用程序挂起

时间:2014-12-01 17:08:45

标签: asp.net performance entity-framework iis asp.net-web-api

我有一个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。

我还能做些什么吗?

任何帮助都会非常感激

1 个答案:

答案 0 :(得分:1)

您需要更改maxConcurrentRequestsPerCPU。您可以在注册表中设置此密钥,也可以在应用程序配置中进行设置。

<system.web>
    <applicationPool maxConcurrentRequestsPerCPU="10000" maxConcurrentThreadsPerCPU="0" requestQueueLimit="10000"/>
</system.web>

你应该真正改变设计,每10秒做5000次请求可能会比你现在做的更好。例如,在输出缓存中缓存结果几秒钟。