spring boot 应用程序只接受 6 个请求,为啥?

Posted

技术标签:

【中文标题】spring boot 应用程序只接受 6 个请求,为啥?【英文标题】:spring boot app only accepts 6 requests why?spring boot 应用程序只接受 6 个请求,为什么? 【发布时间】:2016-07-29 10:17:55 【问题描述】:

这真的很烦我,希望有人能提供帮助。

我有一个 Spring Boot 应用程序,我正在向邮递员发出请求,我需要同时发出大约 20 个单独的请求。但是,我的应用程序只接受 6,然后在这些完成后启动其他应用程序。

我将示例麻木以便在此处发布

简单的控制器方法

@RequestMapping(value = "/testPost", method = RequestMethod.POST)
    public @ResponseBody String handleFileUpload() throws InterruptedException 
        System.out.println("Recieved request for Thread sleeping" + Thread.currentThread().getName());
        Thread.sleep(40000);
        System.out.println("Recieved request for Thread waking" + Thread.currentThread().getName());
        return "returning from post";
    

application.properties:我将最大线程数改为 200 而不是默认值,但没有区别

server.contextPath=/qas
server.port=8081

server.tomcat.max-threads=200

邮递员发出的请求的日志。如您所见,在 6 个请求之后,第 7 个请求仅在第一个请求空闲后才得到服务。我在没有负载平衡器的本地桌面上运行是这个原因吗?不太清楚为什么它会在 6 点停止?

日志:

2016-04-08 09:02:35.408  INFO 17700 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/qas]    : Initializing Spring FrameworkServlet 'dispatcherServlet'
2016-04-08 09:02:35.408  INFO 17700 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2016-04-08 09:02:35.421  INFO 17700 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 13 ms
Recieved request for Thread sleepinghttp-nio-8081-exec-1
Recieved request for Thread sleepinghttp-nio-8081-exec-2
Recieved request for Thread sleepinghttp-nio-8081-exec-3
Recieved request for Thread sleepinghttp-nio-8081-exec-4
Recieved request for Thread sleepinghttp-nio-8081-exec-5
Recieved request for Thread sleepinghttp-nio-8081-exec-6
Recieved request for Thread wakinghttp-nio-8081-exec-1
Recieved request for Thread sleepinghttp-nio-8081-exec-7
Recieved request for Thread wakinghttp-nio-8081-exec-2
Recieved request for Thread sleepinghttp-nio-8081-exec-8
Recieved request for Thread wakinghttp-nio-8081-exec-3
Recieved request for Thread wakinghttp-nio-8081-exec-4
Recieved request for Thread wakinghttp-nio-8081-exec-5
Recieved request for Thread wakinghttp-nio-8081-exec-6
Recieved request for Thread wakinghttp-nio-8081-exec-7
Recieved request for Thread wakinghttp-nio-8081-exec-8

提前致谢

【问题讨论】:

大多数浏览器都限制向同一域 / url 触发 6 个并发请求。见sgdev-blog.blogspot.nl/2014/01/…。因此,它与您的后端无关,而与您如何触发请求有关。 【参考方案1】:

很多人不知道(或忘记)的是,大多数浏览器都有每个主机可以触发的最大并行请求数。多少取决于浏览器和浏览器版本。 (显然你使用 Postman,它使用允许 6 个并发请求的 chrome)。

有关更详细的说明,请参阅http://sgdev-blog.blogspot.nl/2014/01/maximum-concurrent-connection-to-same.html

另见https://***.com/a/985704/2696260

【讨论】:

万一其他人遇到这种情况,但对于 2 个并行请求,Chromium 浏览器会在请求可缓存资源时阻塞。见***.com/q/27513994/2506594

以上是关于spring boot 应用程序只接受 6 个请求,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥spring boot应用程序的main方法已经返回,但应用程序仍然可以接受请求? [关闭]

带有 Spring Boot 的 CORS - 将 GET 请求限制到某些域

Spring Boot 2从入门到入坟 | 请求参数处理篇:常用参数注解之@PathVariable

Spring Boot 2从入门到入坟 | 请求参数处理篇:常用参数注解之@PathVariable

Spring Boot CORS 配置不接受授权标头

Spring Boot MVC 控制器是多线程的吗?