Spring中的最大(客户端请求)线程池大小

111

我正在使用Spring Boot应用程序开发应用程序服务器,但现在我想知道Spring中默认的最大(客户端请求)线程池大小是多少,并且如何自定义该值?

2个回答

154
假设您正在使用嵌入式Tomcat,Spring Boot提供了一个属性来控制客户端请求线程池的大小。其默认值为零,这将使Tomcat使用其默认值200。如果您使用的是Spring Boot 2.3或更高版本,则此属性的名称为server.tomcat.threads.max。在较早的Spring Boot版本中,该属性的名称为server.tomcat.max-threads
要自定义此线程池的大小,您应在application.propertiesapplication.yml文件中指定属性的非零值。

6
谢谢。如果服务器收到的请求数超过了在 application.properties 或 application.yml 中指定的数量,会怎么样呢?我假设它会保持请求吗? - sagar
40
每个请求都需要一个线程来处理。如果当前可用的请求处理线程无法处理更多的同时请求,则会创建额外的线程,最多达到配置的最大值(即maxThreads属性的值)。如果仍有更多的同时请求,则它们会堆积在Connector创建的服务器套接字中,最多堆积到配置的最大值(即acceptCount属性的值)。任何进一步的同时请求将收到“连接拒绝”错误,直到有足够的资源来处理它们。 - Marouane Gazanayi
2
这是从这里提取的:https://tomcat.apache.org/tomcat-7.0-doc/config/http.html - Marouane Gazanayi
你能帮忙吗?http://stackoverflow.com/questions/43181576/threadlocal-using-as-context-information-for-rest-api-with-spring-boot - user6023611
1
@jocull 是的,他们可以使用 ConnectorCustomizer 来实现。这是 Boot 的实现方式:https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/TomcatWebServerFactoryCustomizer.java#L184-L193。 - Andy Wilkinson
显示剩余5条评论

56

自 Springboot 2.3 版本起,server.tomcat.max-threads 已经被弃用,现在请使用 server.tomcat.threads.max 替代,在你的 Spring 应用程序配置文件(application.properties)中进行设置。默认值为200。


1
你应该指出适用的Spring Boot版本。对于2.2.1,这是错误的。 - Simon Logic
2
我认为最好的方法是咨询官方参考文档:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.web - IlyaP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接