京东面试:SpringBoot 同时可以处理多少请求?
一、核心结论
Spring Boot 同时能处理的请求数 不取决于框架本身,而是由其内置的 Web容器 决定。以默认容器 Tomcat 为例:
- 默认最大连接数:8192(
server.tomcat.max-connections
) - 默认最大等待数:100(
server.tomcat.accept-count
) - 总请求处理能力:最大连接数 + 最大等待数 = 8292个
二、Web容器对比
Spring Boot 支持三大主流Web容器:Tomcat、Undertow、Jetty,特性对比如下:
容器 | 所属机构 | 核心特点 | 适用场景 |
---|---|---|---|
Tomcat | Apache基金会 | 成熟稳定,支持Servlet/JSP规范,企业级特性丰富(如SSL、连接池),稍重量级。 | 大型企业应用、复杂业务系统 |
Undertow | Red Hat(红帽) | 高性能、低内存占用,基于NIO和HTTP/2,擅长高并发短连接(如RESTful API)。 | 微服务架构、高并发接口服务 |
Jetty | Eclipse基金会 | 轻量级、可嵌入式,配置灵活,支持WebSocket和NIO,适合快速启动。 | 开发测试环境、轻量级应用、云原生场景 |
三、Tomcat配置解析
1. 最大连接数(max-connections
)
- 含义:Tomcat 同时处理的最大连接数(包括正在处理和空闲连接)。
- 默认值:8192(来源:
spring-configuration-metadata.json
)。 - 配置文件:
server:
tomcat:
max-connections: 2000 # 自定义最大连接数(示例)
2. 最大等待数(accept-count
)
- 含义:当连接数达到上限时,未处理请求的等待队列长度。
- 默认值:100(来源同上)。
- 配置文件:
server:
tomcat:
accept-count: 200 # 自定义最大等待数(示例)
四、切换Web容器的方法
1. 切换为Jetty
<dependencies>
<!-- 排除默认Tomcat依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加Jetty依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>
2. 切换为Undertow
<dependencies>
<!-- 排除默认Tomcat依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加Undertow依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
</dependencies>
五、扩展思考
- Tomcat默认值设计原因:
- 8192是2的13次方,符合网络编程中常见的缓冲区大小规范(如1024字节为1KB),便于内存管理和性能优化。
- 其他容器的请求处理能力:
- Jetty:默认最大连接数无固定限制,需通过
ServerConnector
配置(如maxIdleTime
等参数)。 - Undertow:基于NIO的非阻塞模型,理论并发能力高于Tomcat,具体取决于系统资源(如CPU、内存)。