SpringBoot默认最大连接数的实践

 更新时间:2025年06月13日 09:24:53   作者:北辰alk  
Spring Boot 应用的最大连接数取决于多个因素,包括使用的Web服务器类型、配置以及底层操作系统的限制,下面就来介绍一下不同场景的默认值配置,具有一定的参考价值,感兴趣的可以了解一下

Spring Boot 应用的最大连接数取决于多个因素,包括使用的Web服务器类型、配置以及底层操作系统的限制。下面我将详细分析不同场景下的默认值及其配置方式。

一、默认连接数概述

不同内嵌服务器的默认值

服务器类型默认最大连接数相关配置属性
Tomcat (默认)8192server.tomcat.max-connections
Jetty8192server.jetty.max-connections
Undertow1024server.undertow.io-threads
Netty (WebFlux)取决于事件循环线程数server.netty.* 相关配置

二、Tomcat 的详细配置(默认服务器)

1. 关键线程参数

# 默认配置 (在Spring Boot 2.x/3.x中)
server.tomcat.threads.max=200      # 最大工作线程数
server.tomcat.threads.min-spare=10 # 最小空闲线程数
server.tomcat.max-connections=8192 # 最大连接队列长度

2. 工作原理

  • 连接队列:当所有工作线程都忙碌时,新连接进入队列,最大长度为8192
  • 线程池:Tomcat使用线程池处理请求,默认最大200线程
  • 拒绝策略:当队列满时(8192+200),新的连接会被拒绝

3. 计算公式

理论最大并发 = max-threads + accept-count(默认 = 200 + 8192 = 8392)

三、其他服务器的配置

1. Jetty 配置

server.jetty.threads.max=200
server.jetty.threads.min=8
server.jetty.threads.idle-timeout=60000ms
server.jetty.max-connections=8192

2. Undertow 配置

server.undertow.threads.io=8       # I/O线程数(默认CPU核心数×2)
server.undertow.threads.worker=256 # 工作线程数
server.undertow.buffer-size=1024   # 缓冲区大小

四、配置优化建议

1. 生产环境推荐设置

# Tomcat 生产配置示例
server.tomcat.threads.max=800
server.tomcat.threads.min-spare=100
server.tomcat.max-connections=10000
server.tomcat.accept-count=5000

# 连接超时设置
server.tomcat.connection-timeout=5s

2. 考虑因素

  • 硬件资源:CPU核心数、内存大小
  • 请求特性:长连接/短连接、请求处理时间
  • 业务类型:CPU密集型 vs I/O密集型

五、如何验证当前配置

1. 通过Actuator端点

# 首先启用actuator
management.endpoints.web.exposure.include=*

访问:http://localhost:8080/actuator/env/server.tomcat.*

2. 通过JMX

启动应用时添加JVM参数:

-Dspring.jmx.enabled=true
-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

使用JConsole或VisualVM连接查看

六、操作系统级限制

即使Spring Boot配置允许大量连接,仍需检查:

1. Linux系统限制

# 查看文件描述符限制
ulimit -n

# 临时提高限制
ulimit -n 65535

# 永久修改
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

2. Windows系统限制

Windows的并发连接数限制主要取决于:

  • 可用端口范围(通常约16000个临时端口)
  • 注册表中的MaxUserPortTcpTimedWaitDelay设置

七、性能测试建议

使用压测工具验证实际吞吐量:

# 使用wrk测试
wrk -t12 -c4000 -d30s http://localhost:8080/api

# 使用JMeter
jmeter -n -t test_plan.jmx -l result.jtl

监控指标

  • 活跃线程数
  • 请求排队时间
  • 错误率(特别是连接拒绝)

八、常见问题解决

1. 出现"Connection refused"错误

  • 检查max-connectionsaccept-count是否过小
  • 检查操作系统文件描述符限制
  • 检查线程池是否耗尽(线程数不足或处理阻塞)

2. 高并发下性能下降

  • 适当增加max-threads
  • 优化业务逻辑减少处理时间
  • 考虑使用异步处理(如WebFlux)

3. 内存溢出风险

每连接大约消耗2-4KB内存,10000连接约需40MB内存:

  • 监控JVM内存使用
  • 根据实际内存调整连接数上限

九、总结

Spring Boot默认连接处理能力:

  • Tomcat/Jetty:最大8392并发(200线程 + 8192队列)
  • Undertow:默认约1000并发(更依赖I/O线程配置)

实际生产环境中,应根据:

  • 硬件配置
  • 业务需求
  • 性能测试结果

进行针对性调优,而非简单依赖默认值。记住:更高的连接数意味着更多的资源消耗,需要在吞吐量和资源利用率之间找到平衡点。

到此这篇关于SpringBoot默认最大连接数的实践的文章就介绍到这了,更多相关SpringBoot默认最大连接数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringCache缓存处理详解

    SpringCache缓存处理详解

    这篇文章主要介绍了SpringCache缓存处理详解,SpringCache是一个框架,实现了基于注解缓存功能,只需要简单地加一个注解,就能实现缓存功能,需要的朋友可以参考下
    2023-09-09
  • IDEA怎么设置maven配置

    IDEA怎么设置maven配置

    这篇文章主要介绍了IDEA怎么设置maven配置,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • java中sleep方法和wait方法的五个区别

    java中sleep方法和wait方法的五个区别

    这篇文章主要介绍了java中sleep方法和wait方法的五个区别,sleep 方法和 wait 方法都是用来将线程进入休眠状态,但是又有一些区别,下面我们就一起来看看吧
    2022-05-05
  • 10个Java程序员熟悉的面向对象设计原则

    10个Java程序员熟悉的面向对象设计原则

    这篇文章主要为大家详细介绍了Java程序员应当知道的10个面向对象设计原则,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 利用Java实现mTLS调用

    利用Java实现mTLS调用

    这篇文章主要介绍使用 Java作为客户端 与受 mTLS 保护的服务交互。为了对我们的 Java 客户端进行 ssl 配置,我们需要先设置一个 SSLContext。这简化了事情,因为 SSLContext 可用于各种 http 客户端,接下来我们一起进入下面文章了解具体内容,需要的朋友可以参考一下
    2021-11-11
  • mybatis使用mapper代理开发方式

    mybatis使用mapper代理开发方式

    使用MyBatis代理开发模式时,需要注意定义与映射配置文件同名的接口类,确保namespace属性与接口路径一致,接口方法名和映射文件中的id名称相同,返回类型保持一致,在mybatis-config.xml中配置映射文件路径,保证结构一致,可通过注解@Param传递多个参数
    2024-10-10
  • spring整合mybatis的底层原理分析

    spring整合mybatis的底层原理分析

    这篇文章主要介绍了spring整合mybatis的底层原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • IDEA Debug过程中使用Drop Frame或Reset Frame实现操作回退的方法

    IDEA Debug过程中使用Drop Frame或Reset Frame实现操作回退的方法

    在IDEA中就提供了一个帮助你回退代码的机会,但这个方法并不是万能的,好了,下面就来具体说说IDEA Debug过程中使用Drop Frame或Reset Frame实现操作回退的方法,感兴趣的朋友一起看看吧
    2022-04-04
  • springboot-assembly自定义打包全过程

    springboot-assembly自定义打包全过程

    这篇文章主要介绍了springboot-assembly自定义打包全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java抽象类概念与用法实例分析

    Java抽象类概念与用法实例分析

    这篇文章主要介绍了Java抽象类概念与用法,结合实例形式分析了java抽象类的概念、方法、特点及使用方法,需要的朋友可以参考下
    2018-02-02

最新评论