Spring Boot仅处理单个请求问题:多请求串行执行异常排查
问题:Spring Boot接口无法并发处理请求
环境信息
- Spring Boot版本:2.7.6(内置Tomcat 9.0.69)
- Java版本:1.8
- 未配置任何自定义属性文件
接口代码
@GetMapping("/start") public String demo() { Response output = null; System.out.println("Inside API"); InputRequest request = new InputRequest(); request.setType("type1"); request.setSize(50); request.setPageType("page1"); for(int i = 0 ; i<10000000; i++) { System.out.println("ankit "+i); } System.out.println("Inside done"); return "Success"; }
现象与预期
当从10个不同浏览器窗口调用http://localhost:8000/start时,请求串行执行,日志输出如下:
Inside API Inside Done Inside API Inside Done ...
预期日志应为多个请求同时进入接口,输出:
Inside API Inside API Inside API ...
原因与解决办法
核心原因
问题并非出在Spring Boot或Tomcat的配置上,而是浏览器对同一域名的并发请求数限制。主流浏览器(如Chrome、Firefox)默认对同一域名的并发HTTP请求数限制为6个左右,超出的请求会被浏览器排队等待,直到已有请求完成后才会发起新请求。即使打开多个浏览器窗口,部分浏览器仍会共享域名请求的并发限制策略。
验证与解决方式
- 换用多浏览器或无限制工具测试:使用不同品牌的浏览器(如Chrome、Edge、Firefox各开几个窗口),或者用Postman、curl等专业接口测试工具批量发起请求,这类工具没有浏览器的并发请求数限制,能真实验证后端的并发处理能力。
- 显式配置Tomcat线程池(可选):虽然Spring Boot默认的Tomcat线程池(核心线程数10,最大线程数200)足够处理10个并发请求,但如果需要调整并发能力,可在
application.properties中添加配置:
server.tomcat.threads.core=20 server.tomcat.threads.max=200
内容的提问来源于stack exchange,提问作者Ankit Bansal
相关产品推荐
相关产品推荐

