Spring Boot 的默认最大连接数取决于其内置的服务器(如 Tomcat、Jetty 或 Undertow)以及相关配置。以下是详细分析:
1. 不同服务器的默认配置
Tomcat(默认服务器)
Spring Boot 2.x/3.x 默认使用 Tomcat,其核心连接参数如下:
- 最大连接数(
maxConnections
):8192(Tomcat 10+ 默认值)- 含义:服务器可接受的最大连接数(包括等待处理的连接)。
- 最大工作线程数(
maxThreads
):200- 含义:同时处理请求的最大线程数。
- 最大等待队列长度(
acceptCount
):100- 含义:当所有线程都在处理请求时,可放入队列等待的最大请求数。
配置示例(application.properties
):
server.tomcat.max-threads=500
server.tomcat.max-connections=10000
server.tomcat.accept-count=200
Jetty
- 最大连接数(
maxConnections
):200- 含义:同时打开的最大连接数。
- 最大工作线程数(
maxThreads
):200 - 最大队列长度(
acceptQueueSize
):0(无限队列,不推荐生产环境)
配置示例(application.properties
):
server.jetty.max-threads=500
server.jetty.accept-queue-size=200
Undertow
- 最大工作线程数(
io-threads
×worker-threads
):io-threads
:2 × CPU核心数(默认)worker-threads
:200(默认)- 总线程数 =
io-threads
×worker-threads
- 每个连接的直接缓冲区大小(
direct-buffers
):true(默认启用)
配置示例(application.properties
):
server.undertow.threads.io=8
server.undertow.threads.worker=500
2. 如何查看默认配置?
启动应用时,Spring Boot 会在日志中打印服务器配置:
Tomcat initialized with port(s): 8080 (http)
Tomcat started on port(s): 8080 (http) with context path ''
可通过添加 logging.level.org.springframework.boot=DEBUG
查看更详细的配置信息。
3. 如何调整最大连接数?
方式一:修改 application.properties
/application.yml
server:
tomcat:
max-threads: 500 # 最大工作线程数
max-connections: 10000 # 最大连接数
accept-count: 200 # 最大等待队列长度
connection-timeout: 20000 # 连接超时时间(毫秒)
方式二:Java 配置类
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ServerConfig {
@Bean
public TomcatServletWebServerFactory tomcatFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers(connector -> {
connector.setMaxThreads(500);
connector.setMaxConnections(10000);
connector.setAcceptCount(200);
});
return factory;
}
}
4. 影响最大连接数的其他因素
-
操作系统限制:
- Linux 的
ulimit -n
(默认 1024)需调整为更高值(如ulimit -n 65535
)。 - 永久修改需编辑
/etc/security/limits.conf
。
- Linux 的
-
JVM 堆内存:
- 每个线程默认占用约 1MB 栈内存,过多线程可能导致 OOM。
- 调整 JVM 参数:
java -Xmx2g -Xms2g -XX:ThreadStackSize=256k -jar app.jar
。
-
数据库连接池:
- 应用内数据库连接池(如 HikariCP)的
maximum-pool-size
需与服务器线程数匹配。 - 示例配置:
spring: datasource: hikari: maximum-pool-size: 100
- 应用内数据库连接池(如 HikariCP)的
5. 生产环境建议配置
根据应用类型(I/O 密集型或 CPU 密集型)调整:
-
I/O 密集型应用(如微服务、API 网关):
server: tomcat: max-threads: 500-1000 max-connections: 10000-20000
-
CPU 密集型应用(如计算、数据分析):
server: tomcat: max-threads: 2 × CPU核心数 max-connections: 5000-10000
6. 性能测试工具
推荐使用以下工具测试最大连接数:
- Apache JMeter:模拟大量并发请求。
- wrk:轻量级 HTTP 压测工具。
- Gatling:基于 Scala 的高性能压测工具。
总结
- 默认最大连接数:Tomcat 为 8192,Jetty 为 200,Undertow 由线程数决定。
- 默认工作线程数:通常为 200。
- 生产环境需调整:根据业务类型、硬件资源和性能测试结果优化配置。
- 监控工具:使用 Actuator、Prometheus + Grafana 监控连接数和线程池状态。