Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Web Api实体框架6高CPU使用率和应用程序挂起_Asp.net_Performance_Entity Framework_Iis_Asp.net Web Api - Fatal编程技术网

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

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

我有一个ASP.NET Web Api应用程序,其中Entity Framework 6在2个超大的os AWS实例上运行

之前有两个大型实例,但过了一段时间后,我遇到了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));
        }
    }
公共异步任务发布(示例请求示例)
{
尝试
{
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(默认大小的两倍)合理吗?我问是因为我还没试过。实际上,我添加了第三个实例,它现在正在工作。但我们需要尽快尝试。再次感谢你。