2014-12-01 71 views
0

我有一個ASP.NET Web Api應用程序,實體框架6在2個額外的大型實例上運行。Web Api實體框架6高CPU使用率和應用程序掛起

這是之前的兩個大案例,但一段時間後我面臨着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

是其他任何東西,我可以做什麼?

任何幫助將非常感激

回答

1

您需要更改maxConcurrentRequestsPerCPU。您可以在註冊表中設置此密鑰或將其設置爲您的應用程序配置。

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

你真的應該改變設計,使得5000的要求比你在這個時刻做每隔10秒大概可以以更好的方式來處理。例如,在輸出緩存中緩存結果幾秒鐘。

+0

你好同行。 發佈問題後,我發現這個鏈接,詳細說明你說的:http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on- iis-7-0-and-6-0.aspx 我知道不建議在如此短的時間內處理這些數量的請求。我需要儘快尋找替代品,例如網絡套接字。 您認爲將maxConcurrentRequestsPerCPU和requestQueueLimit設置爲10000(默認大小的兩倍)是合理的嗎?我問,因爲我還沒有嘗試過。實際上,我添加了第三個實例,現在它正在工作。但需要儘快嘗試。 再次感謝您。 – otaviosoares 2014-12-03 16:32:37