用于发送大HTTPWebRequest的应用程序崩溃与异常异常

问题描述:

要求是创建一个应用程序的压力测试的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

感谢您的回复。之前我也认为这可能是原因。不过,我通过限制进程的专用字节为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 Tejas 2012-04-20 15:26:16