SpringBoot 默认同时可以处理的最 大连接数是多少?

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-threads2 × CPU核心数(默认)
    • worker-threads200(默认)
    • 总线程数 = 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. 影响最大连接数的其他因素

  1. 操作系统限制

    • Linux 的 ulimit -n(默认 1024)需调整为更高值(如 ulimit -n 65535)。
    • 永久修改需编辑 /etc/security/limits.conf
  2. JVM 堆内存

    • 每个线程默认占用约 1MB 栈内存,过多线程可能导致 OOM。
    • 调整 JVM 参数:java -Xmx2g -Xms2g -XX:ThreadStackSize=256k -jar app.jar
  3. 数据库连接池

    • 应用内数据库连接池(如 HikariCP)的 maximum-pool-size 需与服务器线程数匹配。
    • 示例配置:
      spring:
        datasource:
          hikari:
            maximum-pool-size: 100
      

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 监控连接数和线程池状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值