You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Benchmark首请求非并发问题排查与解决咨询

问题原因及解决方法

核心原因

1. Apache Benchmark(ab)的默认协议与请求调度逻辑

ab默认使用HTTP/1.0协议,该协议默认不支持持久连接(Keep-Alive),每个请求都需要新建TCP连接。ab的早期实现逻辑是先发送第一个请求,等待其连接完全关闭后,再批量创建剩余的并发连接并发送请求,这就导致第一个请求单独执行,剩余请求才并行处理。

2. 目标服务的首次初始化开销

首次请求Spring Boot应用时,会触发Tomcat容器的线程池初始化、相关类加载、依赖实例化等操作,这些初始化工作会增加第一个请求的处理时间,让它看起来像是单独执行;而后续请求可以复用已初始化的资源,从而实现并行处理。

解决方法

1. 启用HTTP/1.1持久连接

在ab命令中添加-k参数,强制使用HTTP/1.1并开启Keep-Alive,这样ab可以在同一个TCP连接上发送多个请求,并发逻辑会符合预期。示例命令:

ab -n 4 -c 4 -k http://localhost:8080/block/10

2. 预热目标服务

在正式基准测试前,先发送1-2个请求触发服务初始化,避免首次请求的初始化开销干扰测试结果。比如先执行:

ab -n 1 -c 1 http://localhost:8080/block/10

再运行正式的并发测试命令。

3. 调整ab的并发参数(可选)

如果上述方法效果不佳,可以尝试添加-r参数忽略连接错误,确保并发请求的稳定性;同时可以通过-v 2参数查看请求的协议细节,确认是否正确使用了HTTP/1.1。

内容的提问来源于stack exchange,提问作者FrozenHat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:52:37