Spring-boot Tomcat能提供的连接数不超过10,000个?

10

我正在使用 Spring Boot 测试服务器,但是在测试过程中遇到了一些问题。

我的测试内容是:增加 WebSocket 会话(客户端数量)时,服务器使用多少内存。

1000 个客户端(小于 9000 个会话)没有问题。但是,当我尝试测试 1 万个连接时,服务器几乎创建了 10000 个连接(有时会创建 9990 个会话,有时会创建 9988、9996 等等,不是具体的套接字数限制),之后就停止创建会话,没有错误,只是没有响应。

如果某些客户端超时并释放连接,则其他等待连接的客户端将能够获得连接。

'环境' tomcat : 8.0.36 spring-boot : 1.3.3 java : 1.8

对于解决方案,我尝试了:

  1. 增加堆大小。

    • 我增加了 5GB 的 JVM 堆内存,但用于连接的堆内存仅为 2GB。因此,我认为这与 JVM 内存无关。
  2. 我在 application.properties 中设置了 server.tomcat.max-thread = 20000。

    • 但是失败了,与之前没有任何区别。

我真的很好奇这个问题。如果您知道此问题并且有想法,请让我知道原因。谢谢。

2个回答

10

Tomcat - maxThreads vs maxConnections

尝试将maxConnections属性设置为大于10000。

官方文档中可知:

服务器同时接受并处理的最大连接数。当达到此数量时,服务器将接受但不处理一个额外的连接。该连接将被阻塞,直到正在处理的连接数下降到小于maxConnections,此时服务器将重新开始接受和处理新连接。请注意,一旦达到限制,操作系统仍可以根据acceptCount设置接受连接。默认值因连接器类型而异。对于BIO,默认值是maxThreads的值,除非使用Executor,在这种情况下默认值将从执行程序的maxThreads获得。对于NIO,默认值是10000。对于APR/native,默认值是8192

请注意,在Windows上的APR/native中,配置的值将减少到小于或等于maxConnections的最高1024的倍数。出于性能考虑,这样做。

如果将值设置为-1,则禁用maxConnections功能并且不计算连接数。


谢谢。它意味着最大连接的默认值为10,000。 - Jason
@StanislavL,我如何通过编程方式检查这些配置? - Artanis Zeratul
@ArtanisZeratul,你可以将属性自动装配到需要它的bean中。像这样:@Value("${server.tomcat.max-connections}") private int maxConnection; 然后使用该值。确切的属性键取决于您使用的Spring/Tomcat版本。 - StanislavL

8

在Spring Boot中,有一个与Tomcat最大连接数相关的属性需要在application.properties文件中进行设置。

server.tomcat.max-connections= # Maximum number of connections that the server will accept and process at any given time.

谢谢你的回答。 但是我收到了这个错误信息“'server.tomcat.max-connections'是未知属性。” 你知道我还需要做些什么吗? - Jason
它是在Spring Boot 1.5.0中引入的。 - pastafarian

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