【发布时间】:2017-01-07 16:00:45
【问题描述】:
我有一个HTTP GET request。我需要在 1 秒内将请求发送到应用程序服务器超过 4000 次。
我正在使用 JMeter 发送这些请求。我每次使用嗅探器工具 (Wireshark) 对每个测试进行空灵的跟踪。
我尝试通过一台机器、多台机器(并行)甚至分布式模式来实现这一点。
实际上,JMeter 结果不是我关心的问题。这个测试的关注点是在嗅探工具上看到4000 请求在一秒钟内到达服务器。
在使用以下 JMeter 测试计划时,我在 ethereal trace 中的 1 sec 中几乎发现了 2500 请求。
Number of Threads= 4000
Ramp-Up Periods = 0 (Though it is depricated)
Loop count= 1
当我使用线程数作为2500 时,我几乎得到2200 request 在空灵跟踪中在一秒钟内访问服务器。
服务器对该请求的响应不是我关心的问题。我只是想确保JMeter 发送的4000 请求在一秒钟内到达应用服务器。
更新:
案例 1:(4000 个线程)
Number of Threads= 4000
Ramp-Up Periods = 0
Loop count= 1
案例 1 的输出:
JMeter(在表中查看结果):启动 4000 个请求需要 2.225 秒。
Ethereal trace:4000 个请求到达服务器需要 4.12 秒。
案例 2:(3000 个线程)
JMeter(在表中查看结果):启动 3000 个请求需要 1.83 秒。
Ethereal trace:3000 个请求到达服务器需要 1.57 秒。
案例 3:(2500 个线程)
JMeter(在表中查看结果):启动 2500 个请求需要 1.36 秒。
Ethereal trace:2500 个请求到达服务器需要 2.37 秒。
案例 4:(2000 个线程)
JMeter(在表中查看结果):启动 2000 个请求需要 0.938 秒。
Ethereal trace:2000 个请求到达服务器需要 1.031 秒。
I have run these test from only one machine.
No listeners added.
Non-Gui mode.
No assertions in my scripts.
Heap size: 8GB
所以,我不明白为什么我的 JMeter 结果和空灵痕迹彼此不同。我也试过用Synchronizing Timer 来实现这个场景。
由于 4000 Threads 太重了,也许我必须在分布式模式下进行测试。我也尝试过分布式模式(1 个主设备,2 个从设备)。也许我的脚本是错误的。
是否可以在空灵的跟踪中看到我的 4000 个请求在 1 秒内到达服务器?
在分布式模式下实现这个场景的 JMeter 脚本是什么?
【问题讨论】:
-
与任何网络测试一样,总会出现问题,尤其是延迟问题 - 即使您每秒可以发送 4000 个请求,它们也会按顺序发送(这就是数据包的获取方式已发送),并且可能不会在那一秒内全部命中,加上处理时间。
-
4000 个线程需要 4000 个堆栈。每个 1MB,仅堆栈就有 4GB 的 RAM。
-
请求必须每次都打开一个新的连接,还是可以重复使用打开的套接字?
-
这两种情况对我来说都可以。但我需要看到在我的虚幻跟踪中,一次(1 秒)恰好有 4000 个请求到达服务器。
-
为什么是
exactly?如上所述,您的要求是能够处理至少 4000 rps。因此,只要您发送了 4000 或更多 rps,您就已经测试了您的要求。
标签: java jmeter performance-testing heap-memory stack-memory