京东面试:SpringBoot 同时可以处理多少请求?

Estimated reading: 2 minutes 13 views

一、核心结论

Spring Boot 同时能处理的请求数 不取决于框架本身,而是由其内置的 Web容器 决定。以默认容器 Tomcat 为例:

  • 默认最大连接数:8192(server.tomcat.max-connections
  • 默认最大等待数:100(server.tomcat.accept-count
  • 总请求处理能力:最大连接数 + 最大等待数 = 8292个

二、Web容器对比

Spring Boot 支持三大主流Web容器:Tomcat、Undertow、Jetty,特性对比如下:

容器所属机构核心特点适用场景
TomcatApache基金会成熟稳定,支持Servlet/JSP规范,企业级特性丰富(如SSL、连接池),稍重量级。大型企业应用、复杂业务系统
UndertowRed Hat(红帽)高性能、低内存占用,基于NIO和HTTP/2,擅长高并发短连接(如RESTful API)。微服务架构、高并发接口服务
JettyEclipse基金会轻量级、可嵌入式,配置灵活,支持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>

五、扩展思考

  1. Tomcat默认值设计原因
  • 8192是2的13次方,符合网络编程中常见的缓冲区大小规范(如1024字节为1KB),便于内存管理和性能优化。
  1. 其他容器的请求处理能力
  • Jetty:默认最大连接数无固定限制,需通过ServerConnector配置(如maxIdleTime等参数)。
  • Undertow:基于NIO的非阻塞模型,理论并发能力高于Tomcat,具体取决于系统资源(如CPU、内存)。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注