使用 Apache Benchmark 工具时,我注意到第一个请求没有同时执行。
例如,运行时:
ab -n 4 -c 4 http://localhost:8080/block/10
我得到以下结果:
2024-01-17T13:40:28.398-05:00 INFO 61127 --- [sample-client] [nio-8080-exec-1] a.s.s.client.controller.HomeController : 200 OK on Thread[#56,http-nio-8080-exec-1,5,main]
2024-01-17T13:40:38.414-05:00 INFO 61127 --- [sample-client] [nio-8080-exec-3] a.s.s.client.controller.HomeController : 200 OK on Thread[#58,http-nio-8080-exec-3,5,main]
2024-01-17T13:40:38.414-05:00 INFO 61127 --- [sample-client] [nio-8080-exec-2] a.s.s.client.controller.HomeController : 200 OK on Thread[#57,http-nio-8080-exec-2,5,main]
2024-01-17T13:40:38.414-05:00 INFO 61127 --- [sample-client] [nio-8080-exec-4] a.s.s.client.controller.HomeController : 200 OK on Thread[#59,http-nio-8080-exec-4,5,main]
第一个请求在 13:40:28 执行并自行运行。返回后,其余 3 个请求是并行的。所有 4 个请求都在不同的线程上运行,但不同时运行。
我不认为这是我的笔记本电脑无法同时处理 4 个线程的问题。如果我将参数更改为
-n 3 -c 3
我会得到相同的结果。第一个请求被执行,然后当它完成时,剩余的 2 个请求将并行完成。
我使用的代码是一个 Spring Boot 应用程序,它调用另一个 Spring Boot 应用程序。我正在观看Spring 开发者倡导者 Dan Vega 的视频。 Dan 也遇到了这个问题,第一次出现在视频的 16:15 左右。他预计时间为 15 秒,但结果是 18 秒。在他的所有测试中,这一偏差都持续存在。视频中的原因可能与我遇到的情况相同。
对于造成这种情况的原因或如何解决它有什么想法吗?这导致基准偏离。
我注意到同样的行为,它与你的服务器无关。我尝试了不同的服务器(WireMock、Spring Boot 应用程序、Mockoon),结果都相同。不过,我发现了名为 Hey 的“apachebench replacement”工具,它似乎按预期工作。