当前位置: 代码网 > it编程>编程语言>Java > SpringBoot默认最大连接数的实践

SpringBoot默认最大连接数的实践

2025年06月13日 Java 我要评论
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默认最大连接数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com