2015-02-24 47 views
4

我在IIS上託管的ASP.NET MVC項目存在問題。我淹沒了同樣的要求數百次:ASP.NET MVC項目中一些請求的巨大延遲

function Test(count){ 
    for(var i=0; i<count; i++){ 
     $.ajax({ 
      url: "http://example.com?someparam=sth&test="+i, 
      context: document.body 
     }).done(function() { 
      console.log("done"); 
     }); 
    } 
} 
Test(500) 

下面是每個請求的以毫秒爲單位的所用的時間(這裏僅僅是發送請求的一部分):

221 
215 
225 
429 
217 
228 
227 
209 
236 
355 
213 
224 
257 
249 
223 
211 
227 
1227 
168 
181 
257 
3241 
201 
244 
130 
198 
283 
1714 
146 
136 
177 
3304 
294 
868 
772 
2750 
138 
1283 
221 
775 
136 
235 
792 
278 
641 
1707 
880 
1711 

,你可以看到有些請求出現高峯,所需時間可能會超過其他請求平均值的10倍。

  1. 雖然它可能是一個垃圾收集器的問題,但我認爲它不是。我根據每個請求調用了GB。我有同樣的結果,日誌中的延遲仍然存在。
  2. 這不僅發生在我的MVC項目上,而且還發生在一個空的MVC項目上。
  3. 我創建了一個新的MVC項目,並向Home/About發送了很多請求。結果是一樣的。
  4. 我嘗試了一個返回EmprtActionResult ...的結果。

如果有人知道爲什麼發生這種情況,有針對該問題的解決方案或只是有一個建議......請分享信息,我將非常感激

而且我使用.NET Memory Profiler,但我無法找到如何跟蹤每個請求,並準確捕捉延遲請求。我可以用.NET Memory Profiler嗎?如果我不建議使用另一個將爲我工作的分析器。

謝謝!

編輯:我也嘗試過一個空的WebForms項目。只有第一次請求才有延遲......但這是因爲IIS確實正在升溫。並且在接下來的1495次請求中不會出現延遲。

+0

這是在本地運行嗎?你在使用一些ORM嗎? – 2015-02-24 13:48:45

+0

由於延遲似乎經常發生,因此您可以嘗試查看是否可以直接在您的MVC應用程序中使用MiniProfiler查明問題。 – AroglDarthu 2015-02-24 13:56:48

+0

所以我嘗試了它在本地和服務器上。這些結果來自IIS日誌。我認爲不管是否使用任何ORM都沒關係,因爲當我在新的Empty MVC項目上嘗試時,結果是一樣的。 – Dzhambazov 2015-02-24 14:06:56

回答

0

您的測試方法無法確定您的瓶頸可能發生的位置,只是有些事情造成您的延遲。

此外,沒有提及這是否是一個孤立的服務器。如果您正在訪問製作網站,訪問該網站的訪問者請求訪問網頁時會受到影響。

至少,您需要爲此添加一個控件。我會從同一個Web服務器加載一個純文本文件開始。另一點需要注意的是,大多數網絡瀏覽器將限制同一網站的併發請求數量。通常,這是兩個同時請求。您的延遲可能是您客戶端的ajax請求積壓。