【发布时间】:2014-09-22 00:02:17
【问题描述】:
有没有办法刺激10000个并发HTTP请求?
我试试攻城工具 但我的笔记本电脑只有 2000 个请求限制 我怎样才能发出 10000 个请求?
【问题讨论】:
-
是编程题吗?
标签: http web concurrency
有没有办法刺激10000个并发HTTP请求?
我试试攻城工具 但我的笔记本电脑只有 2000 个请求限制 我怎样才能发出 10000 个请求?
【问题讨论】:
标签: http web concurrency
生成大量并发请求的最简单的方法,它可能是 Apache 的 ab 工具。
例如,ab -n 100 -c 10 http://www.example.com/ 将请求给定网站 100 次,并发 10 个请求。
确实,同时请求的数量是受性质限制的。请记住,TCP 只有 65536 个可用端口,其中一些已经被占用,而前 1024 个通常是保留的,这使得每台机器理论上最多可以有大约 64500 个端口用于传出请求。
还有操作系统限制。例如,在 Linux 中,net.ipv4.* 组中有内核参数。
最后,您当然应该配置您的 HTTP 服务器来处理这么多的并发请求。在 Apache 中,它们是 StartServers 和它的朋友,在 nginx 中是 worker_processes 和 worker_connections。另外,如果你有一些独立的动态处理器连接到你的网络服务器(例如 php-fpm),你也必须增加连接池中空闲进程的数量。
毕竟海量并行请求的目的应该是找到你的瓶颈,上面的步骤会给你一个公平的思路。
顺便说一句。如果您使用ab,请仔细阅读其最终报告。它可能看起来很简短,但它包含许多有用的信息(例如,“非 2xx 响应”可能表示由于过载而导致的服务器端错误。)
【讨论】:
Jmeter 允许分布式测试,这意味着您可以设置一组计算机(一台作为主机,其余作为从机)来运行您需要的任意数量的线程。 Jmeter 有一个很好的文档在这里解释这一点。 . .
http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.pdf
还有更多信息在这里。 . .
http://digitalab.org/2013/06/distributed-testing-in-jmeter/
如果您没有足够的从机访问权限,您也可以在云上设置这一切,有几个服务可以做到这一点。
【讨论】:
您是否尝试过使用Apache JMeter?您可以创建一个web test plan,您可以使用多个选项。您可以按照here 的概述将请求包装在 ThreadGroup 中。您还可以生成广泛的报告和图表。如果简单的线程组还不够,您可以尝试将UltimateThreadGroup plugin 用于 JMeter。
在单台机器上使用 JMeter 创建这么多线程时,内存不足,无法为线程分配新堆栈。为此,您可以考虑减少线程的堆栈空间。 SO答案here中解释了如何做到这一点。该帖子还有其他一些替代方法。
【讨论】:
如果操作系统对允许的同时 TCP 连接数没有限制,则有一个注册表设置可以删除或增加该限制。在确定不是这种情况后,您可以编写一些包含 AJAX 请求的 JavaScript 并将其放入循环中。
您可能需要node.js 来执行 JavaScript。
【讨论】: