如何在1秒内发送4000多个请求?

我有一个.我需要在 1 秒内将请求发送到应用程序服务器超过一次。HTTP GET request4000

我使用JMeter发送这些请求。我每次都使用嗅探器工具()对每次测试进行空灵跟踪。Wireshark

我试图从一台机器,多台机器(并行)甚至分布式模式来实现这一点。

实际上,JMeter的结果不是我在这里关心的问题。此测试的重点是查看请求在嗅探器工具的一秒钟内到达服务器。4000

在使用以下JMeter测试计划时,我发现几乎在空灵的跟踪中请求。25001 sec

Number of Threads= 4000
Ramp-Up Periods = 0 (Though it is depricated)
Loop count= 1

当我使用线程数作为时,我几乎在一秒钟内到达服务器在空灵的痕迹中。25002200 request

服务器对该请求的响应不是我在这里关心的问题。我只想确保 发送的请求在一秒钟内到达应用程序服务器。4000JMeter

更新:

案例 1:(4000 个线程)

Number of Threads= 4000
Ramp-Up Periods = 0 
Loop count= 1

案例 1 的输出:

JMeter(在表中查看结果):2.225 秒即可启动 4000 个请求。

空灵跟踪:4.12秒,4000个请求命中服务器。

enter image description here

案例 2:(3000 个线程)

JMeter(在表格中查看结果):1.83 秒即可启动 3000 个请求。

空灵跟踪:1.57秒,3000个请求命中服务器。

案例 3:(2500 个线程)

JMeter(在表中查看结果):1.36 秒即可启动 2500 个请求。

空灵跟踪:2.37秒,2500个请求命中服务器。

案例 4:(2000 个线程)

JMeter(在表中查看结果):0.938 秒即可启动 2000 个请求。

空灵跟踪:1.031秒,2000个请求命中服务器。

I have run these test from only one machine. 
No listeners added.
Non-Gui mode.
No assertions in my scripts.
Heap size: 8GB

所以,我不明白为什么我的JMeter结果和空灵痕迹彼此不同。我还尝试使用同步计时器来实现此方案。

由于4000线程太重,也许我必须在分布式模式下进行测试。我也尝试过分布式模式(1个主站,2个从站)。也许我的脚本是错误的。

有没有可能在飘渺的跟踪中看到我的4000个请求在1秒内到达服务器?

在分布式模式下实现此场景的 JMeter 脚本是什么?


答案 1

如何从服务器是否正确配置以避免此类负载开始。请求可以是任何类型。如果它们是静态请求,则努力确保由于缓存策略或体系结构(例如)而达到这些请求的绝对最小数量到达您的源服务器

  • 如果有返回用户且没有 CDN,请确保缓存策略存储在客户端上,随生成计划过期。这避免了回头客的重复请求
  • 如果您没有回头客且没有 CDN,请确保您的缓存策略至少设置为给定用户集的日志中可见的最大页到页延迟的 120%
  • 如果你有 CDN,请确保所有静态请求标头,301 和 404 标头都设置为允许 CDN 缓存请求,以便在新的生成推送计划中过期。
  • 如果您没有 CDN,请考虑一个模型,在该模型中,您将所有静态资源放在专用服务器上,其中该服务器上的所有内容都标记为在客户端的高级缓存。您还可以在一台服务器上使用清漆或鱿鱼作为缓存代理来承担负载

显然,我怀疑存在设计问题,因为这种高一致的请求级别在起作用。每秒 4000 个请求将变为每小时 14,400,000 个请求,每 24 小时内将变为 345,600,000 个请求。

在流程的基础上,我还建议至少使用三个负载生成器:两个用于主负载,一个用于业务流程的单个虚拟用户|线程的控制虚拟用户。在当前一个负载发生器上的模型中,您没有控制元素来确定负载发生器潜在过载所施加的开销。控制元件的使用将帮助您确定在负载驱动中是否施加了负载生成器偏斜。从本质上讲,你有一个资源耗尽,这是在你的负载生成器上增加一个速度中断。在负载发生器上采用深思熟虑的欠载理念。添加另一个负载生成器比政治资本的费用便宜,当有人攻击您的测试缺乏控制元素,然后您需要重新运行测试时。它也比追逐一个工程幽灵便宜得多,后者看起来像一个缓慢的系统,但它实际上是一个过载的负载发生器。


答案 2

你想坚持使用JMeter吗?否则,Httperf是一个不错的工具,易于使用:

httperf --server=www.example.com --rate=4000 --num-conns=4000

例如。

希望这有帮助一点,尽管不完全是你所要求的。


推荐