最大并发 HttpWebRequests 数

编程入门 行业动态 更新时间:2024-10-23 13:22:10
本文介绍了最大并发 HttpWebRequests 数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在对一个 Web 应用进行压力测试,并设置了一个 Windows 测试程序,该程序启动多个线程并对每个线程发出一个 Web 请求.

I'm stress testing a web app and have set up a windows test program that spins up a number of threads and sends out a web request on each one.

问题是我得到以下输出:

Problem is I get the following output:

01/09/09 11:34:04 Starting new HTTP request on 10 01/09/09 11:34:04 Starting new HTTP request on 11 01/09/09 11:34:04 Starting new HTTP request on 13 01/09/09 11:34:05 Starting new HTTP request on 14 01/09/09 11:34:05 Starting new HTTP request on 11 01/09/09 11:34:05 11 has finished! 01/09/09 11:34:05 Starting new HTTP request on 13 01/09/09 11:34:05 13 has finished! 01/09/09 11:34:05 Starting new HTTP request on 14 01/09/09 11:34:05 14 has finished! 01/09/09 11:34:05 Starting new HTTP request on 11 01/09/09 11:34:05 11 has finished! 01/09/09 11:34:05 Starting new HTTP request on 14 01/09/09 11:34:05 14 has finished! 01/09/09 11:34:05 Starting new HTTP request on 13 01/09/09 11:34:05 13 has finished! 01/09/09 11:34:05 Starting new HTTP request on 15 01/09/09 11:34:06 Starting new HTTP request on 11 01/09/09 11:34:06 11 has finished! 01/09/09 11:34:06 Starting new HTTP request on 14 01/09/09 11:34:06 14 has finished!

哪种看起来最多有 5 个线程,即使我创建了 100 个:

which sort of looks like there's a maximum of 5 threads, even if I create 100 as so:

int numberOfThreads = Convert.ToInt32(txtConcurrentThreads.Text); List<BackgroundWorker> workers = new List<BackgroundWorker>(); for (int N = 0; N < numberOfThreads; N++) { BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); workers.Add(worker); } foreach(BackgroundWorker worker in workers) { worker.RunWorkerAsync(); }

谁能告诉我发生了什么?

Can anyone enlighten me as to what is going on?

谢谢

如果按照建议我睡了 5 秒钟,而不是 httpwebrequest,那么我确实会触发更多线程,但没有我预期的那么多:

If as suggested I sleep for 5 seconds, instead of httpwebrequest, then I do get more threads firing but not as many as I would have expected:

01/09/09 11:56:14 Starting new HTTP request on 7 01/09/09 11:56:14 Starting new HTTP request on 11 01/09/09 11:56:15 Starting new HTTP request on 12 01/09/09 11:56:15 Starting new HTTP request on 13 01/09/09 11:56:16 Starting new HTTP request on 14 01/09/09 11:56:16 Starting new HTTP request on 15 01/09/09 11:56:17 Starting new HTTP request on 16 01/09/09 11:56:17 Starting new HTTP request on 17 01/09/09 11:56:18 Starting new HTTP request on 18 01/09/09 11:56:19 Starting new HTTP request on 7 01/09/09 11:56:19 7 has finished! 01/09/09 11:56:19 Starting new HTTP request on 11 01/09/09 11:56:19 11 has finished! 01/09/09 11:56:19 Starting new HTTP request on 19 01/09/09 11:56:20 Starting new HTTP request on 20 01/09/09 11:56:20 Starting new HTTP request on 12 01/09/09 11:56:20 12 has finished!

看起来我每秒只启动 2 个线程,这对我来说似乎很慢.我想 Console.WriteLine 可能有问题?

It still looks like I'm only getting 2 threads starting every second, which seems mighty slow to me. I suppose the Console.WriteLine could be a problem?

我设置

ThreadPool.SetMinThreads(100, 4);

System.Net.ServicePointManager.DefaultConnectionLimit = 100;

并得到以下结果:

01/09/09 14:00:07 Starting new HTTP request on 11 01/09/09 14:00:07 Starting new HTTP request on 81 01/09/09 14:00:07 Starting new HTTP request on 82 01/09/09 14:00:07 Starting new HTTP request on 79 01/09/09 14:00:07 Starting new HTTP request on 83 01/09/09 14:00:07 Starting new HTTP request on 84 01/09/09 14:00:07 Starting new HTTP request on 85 01/09/09 14:00:07 Starting new HTTP request on 87 01/09/09 14:00:07 Starting new HTTP request on 88 ... 01/09/09 14:00:07 84 has finished! Took 323.0323 milliseconds 01/09/09 14:00:08 88 has finished! Took 808.0808 milliseconds 01/09/09 14:00:08 96 has finished! Took 806.0806 milliseconds 01/09/09 14:00:08 94 has finished! Took 806.0806 milliseconds 01/09/09 14:00:08 98 has finished! Took 801.0801 milliseconds 01/09/09 14:00:08 80 has finished! Took 799.0799 milliseconds 01/09/09 14:00:08 86 has finished! Took 799.0799 milliseconds 01/09/09 14:00:08 92 has finished! Took 799.0799 milliseconds 01/09/09 14:00:08 100 has finished! Took 812.0812 milliseconds 01/09/09 14:00:08 82 has finished! Took 1010.101 milliseconds

so 能够同时推出大量网络请求.似乎在排队(调用 STA COM+ 服务器),这正是我所期望的.

so was able to push out a whole lot of web requests concurrently. Which seemed to queue (calling out to an STA COM+ server) so that's what I expected.

感谢您的帮助

推荐答案

您的所有(或大部分)请求是否都会发送到同一个主机?每个主机都有一个内置限制.您可以在 system.Net connectionManagement 元素的 app.config 中更改此设置.

Are all (or most) of your requests going to the same host by any chance? There's a built-in limit on a per-host basis. You can change this in app.config in the system.Net connectionManagement element.

另一件事是线程池只会逐渐增加其线程数 - 它每半秒启动一个新线程,IIRC.那会是你看到的吗?尝试从等式中删除 HttpWebRequest - 只需睡几秒钟......

The other thing is that the thread pool only ramps up its number of threads gradually - it starts a new thread every half second, IIRC. Could that be what you're seeing? Try getting rid of HttpWebRequest from the equation - just sleep for a couple of seconds instead...

我怀疑后一个问题是您最初遇到的问题,但第一个问题也会给您带来问题.

I suspect the latter problem is the one you're initially running into, but the first one is going to cause you problems as well.

更多推荐

最大并发 HttpWebRequests 数

本文发布于:2023-10-27 23:00:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1534793.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:HttpWebRequests

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!