【问题标题】:Web Api Entity Framework 6 High CPU Usage And Application HangWeb Api Entity Framework 6 高 CPU 使用率和应用程序挂起
【发布时间】:2014-12-01 17:08:44
【问题描述】:

我有一个带有实体框架 6 的 ASP.NET Web Api 应用程序,它在 AWS 上的 2 个超大实例上运行。

之前是 2 个大型实例,但一段时间后我遇到了 IIS 503 错误。

问题是:使用此 api 的应用程序每 10 秒从每个连接的客户端发出请求。我们已经同时连接了 5k 个客户端,每 10 秒调用一次 api。两个实例的cpu都是40%(我觉得还是很高)。

现在应用正在支持负载。但是我们可以接触到多达 20k 的客户,我不知道我还能在代码中改进什么。

每 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。

还有什么我可以做的吗?

任何帮助将不胜感激

【问题讨论】:

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


    【解决方案1】:

    您需要更改 maxConcurrentRequestsPerCPU。您可以在注册表中设置此键或在应用程序配置中设置它。

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

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

    【讨论】:

    • 你好同行。发布问题后,我发现此链接详细说明了您所说的内容:blogs.msdn.com/b/tmarq/archive/2007/07/21/… 我知道不建议在这么短的时间内提出这些请求。我需要尽快寻找替代方案,例如网络套接字。您认为将 maxConcurrentRequestsPerCPU 和 requestQueueLimit 设置为 10000(默认大小的两倍)是否合理?我问是因为我还没有尝试过。实际上我添加了第三个实例,它现在正在工作。但需要尽快尝试。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多