我想通过500k API调用对我的API进行负载测试。
我进行了JMeter测试,该测试从.csv文件读取访问令牌,并使用该令牌进行API调用。
当然,从一台计算机上我不能做那么多请求,所以我实现了分布式JMeter服务器,因此在AWS上有一个主服务器和500个从服务器(t3.medium)。
在测试中,我将循环数设置为:1000(不是很大) 加速:5秒。我希望测试持续5秒钟。因此,在5秒钟的帧内将进行500k API调用的总负载。测试何时开始无关紧要,但是我需要在5秒钟的间隔内从所有从属服务器发出所有请求。
这是测试总是需要更长的时间的问题。例如,发出所有请求大约需要3分钟,而服务器的平均响应时间约为50ms。
如何配置JMeter或应使用什么来保证在5秒的间隔内进行所有500k API调用?
这是母版的示例输出:
Starting remote engines
Starting the test @ Thu Nov 08 18:28:02 UTC 2018 (1541701682517)
summary + 1 in 00:00:00 = 4.8/s Avg: 106 Min: 106 Max: 106 Err: 0 (0.00%) Active: 76 Started: 24 Finished: 0
summary + 286890 in 00:00:27 = 10817.9/s Avg: 66 Min: 44 Max: 1363 Err: 0 (0.00%) Active: 2837 Started: 22851 Finished: 25632
summary = 286891 in 00:00:27 = 10732.9/s Avg: 66 Min: 44 Max: 1363 Err: 0 (0.00%)
summary + 40389 in 00:00:30 = 1344.8/s Avg: 67 Min: 45 Max: 1630 Err: 0 (0.00%) Active: 6607 Started: 27937 Finished: 24366
summary = 327280 in 00:00:57 = 5765.6/s Avg: 66 Min: 44 Max: 1630 Err: 0 (0.00%)
summary + 47986 in 00:00:30 = 1600.6/s Avg: 70 Min: 45 Max: 1618 Err: 0 (0.00%) Active: 2847 Started: 70360 Finished: 70549
summary = 375266 in 00:01:27 = 4326.1/s Avg: 67 Min: 44 Max: 1630 Err: 0 (0.00%)
summary + 8420 in 00:00:31 = 274.6/s Avg: 62 Min: 45 Max: 335 Err: 0 (0.00%) Active: 1231 Started: 77129 Finished: 78934
summary = 383686 in 00:01:57 = 3267.9/s Avg: 66 Min: 44 Max: 1630 Err: 0 (0.00%)
summary + 9173 in 00:00:30 = 305.1/s Avg: 59 Min: 45 Max: 1107 Err: 0 (0.00%) Active: 166 Started: 80976 Finished: 83846
summary = 392859 in 00:02:27 = 2663.8/s Avg: 66 Min: 44 Max: 1630 Err: 0 (0.00%)
Remote engines have been started
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary + 107131 in 00:01:11 = 1504.3/s Avg: 72 Min: 45 Max: 1230 Err: 0 (0.00%) Active: -484 Started: 86185 Finished: 88700
summary = 499990 in 00:03:39 = 2286.2/s Avg: 68 Min: 44 Max: 1630 Err: 0 (0.00%)
Tidying up remote @ Thu Nov 08 18:31:41 UTC 2018 (1541701901996)
答案 0 :(得分:1)
有一个合适的选项:Throughput Shaping Timer和Concurrency Thread Group组合。它们可以通过Schedule Feedback Function放在一起,因此,如果当前数量不足以执行所需的负载,JMeter将启动额外的线程。
一般建议:
让我们缩小一点,您需要确保1台服务器可以在5秒内发送1000个请求或200个请求/秒。这意味着您的服务器响应时间应为 5毫秒(包括建立连接的时间和往返请求的时间)。据我了解,您设置的最小响应时间为45毫秒,最大响应时间为1.6秒。因此,看起来您将无法使用当前设置来实现所需的吞吐量。
现在您需要确定原因,这里有一些提示: