2012-04-20 98 views
2

要求是創建一個應用程序的壓力測試的Web服務。 想法是向Web服務器轟擊1000K HTTPWebRequests大小爲4KB 爲了實現這一目標,我們創建了一個應用程序,其結構類似於少數線程正在將數據發送到隊列和線程池中異步發送這些請求。 Task responseTask = Task.Factory.FromAsync(testRequest.BeginGetResponse, testRequest.EndGetResponse, null);"但是現在發生的事情是在一段時間之後,請求/秒的數量明顯減少(可能是因爲服務的響應時間增加了......但是如果我們異步發送請求,響應時間物?)。除此之外,在一段時間之後,該工具發生消息「應用程序已停止工作」並且異常顯示爲超出內存異常。用於發送大HTTPWebRequest的應用程序崩潰與異常異常

我觀察到的一件事是在應用崩潰之前,Web服務的響應時間顯着增加。這是墜機的間接原因嗎?

它有什麼補救措施?

+0

我認爲減速是由GC試圖跟上造成的。 – 2012-04-20 15:14:40

回答

0

也許你正在排隊的任務沒有限制,所以掛起的請求數量無限增加。即使使用異步行爲,您也需要加油。

+0

感謝您的回覆。之前我也認爲這可能是原因。不過,我通過限制進程的專用字節爲500 MB來限制排隊。我知道這是更高的限制,雖然。 另外我觀察到,限制後,應用程序的處理器利用率顯着增加。這有什麼理由嗎? – Tejas 2012-04-20 14:52:52

+0

好的,當你限制你的進程的內存(你最近怎麼做?)你當然會導致OOM錯誤。畢竟,你否認自己的記憶。該應用程序變得更慢,因爲GC正在瘋狂地試圖釋放字節,因爲它沒有空間可以擴展。許多G2系列產品正在放慢您的流程。 – usr 2012-04-20 15:15:30

+0

System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess(); long privateSetSizeInBytes = currentProcess.PrivateMemorySize64; long privateSetSizeInMBytes = privateSetSizeInBytes/1024/1024; 如果(privateSetSizeInMBytes <500) {//添加請求 } 這是限制在內存的大小.. – Tejas 2012-04-20 15:26:16

相關問題