SpringBoot单体应用到底能同时扛多少并发请求?
文章目录前言一、SpringBoot默认用什么支撑并发二、默认三个核心参数决定整个系统并发上限Tomcat并发核心配置Key及默认值YAML格式核心一句话总结三、重点这300并发是整个系统不是单个接口四、并发数和QPS不是一回事五、默认300并发够用吗六、生产如何提高SpringBoot并发能力七、生产环境Tomcat并发调优配置生产调优完整配置及参数详解调优后核心并发能力说明前言很多人都有一个疑问我用SpringBoot开发的单体项目到底同一时间能承受多少用户、多少请求并发网上说法五花八门有人说200有人说300有人说上万。其实都没错只是大家说的不是同一个维度。今天一篇讲清楚SpringBoot默认情况下真实并发上限到底是多少是单接口限制还是整个系统限制。一、SpringBoot默认用什么支撑并发SpringBoot内置默认Web容器是Tomcat。所有接口、所有请求全部共用同一个Tomcat线程池。也就是说不管你的项目有多少个接口一百个还是一千个大家抢同一批线程干活。二、默认三个核心参数决定整个系统并发上限SpringBoot开箱即用无需手动编写任何配置文件底层已内置Tomcat并发核心默认参数。下面给大家附上生产实际配置Key 默认值 精准作用说明一目了然Tomcat并发核心配置Key及默认值YAML格式# SpringBoot 默认Tomcat并发核心配置无需手动配置系统内置生效server:tomcat:# 1、核心工作最大线程数真正同时处理业务请求的并发数threads:max:200# 2、线程池满了之后请求排队等待的队列容量accept-count:100# 3、服务器支持的最大TCP连接总数含长连接、空闲连接不代表业务处理并发max-connections:8192最大工作线程200真正同时干活的请求排队队列容量100线程满了之后排队等待的请求最大连接数8192只是TCP连接数不代表并发处理能力核心一句话总结SpringBoot单体默认同一时间最多处理200个并发再加100个排队总共系统承压上限300。三、重点这300并发是整个系统不是单个接口很多新手误会❌ 误以为每个接口都能单独扛200并发✅正确整个系统所有接口加起来总共就200个线程在干活。哪怕你的项目有100个接口、200个接口、500个接口全部共享同一个线程池。举个例子如果其中一个查询接口突然瞬间来了200并发直接把线程池占满。后果系统所有其他接口全部卡死、排队、甚至报错。这就是典型的一个接口拖垮整个单体系统。四、并发数和QPS不是一回事很多人搞混两个概念并发数同一时刻同时处理的请求数线程数决定QPS每秒能处理多少请求接口速度决定公式很简单QPS 线程数 × (1000 / 接口平均耗时ms)举例接口很快10ms响应200线程 ≈2万QPS普通业务100ms响应200线程 ≈2000 QPS慢接口查数据库500ms200线程 ≈400 QPS可见线程决定并发上限业务速度决定每秒处理量。五、默认300并发够用吗日常开发、后台管理系统、内部OA、小项目完全够用。面向用户、流量高、商城、活动秒杀完全不够必须调优限流集群。六、生产如何提高SpringBoot并发能力简单三步就能提升单体并发调大Tomcat线程池调到500~800给核心接口加接口限流防止一个接口打爆全局数据库、Redis、业务代码优化耗时最关键七、生产环境Tomcat并发调优配置默认参数仅适合开发测试、低流量内部系统面向公网用户、业务流量较高的单体项目必须手动调优Tomcat线程池及连接参数。以下为8核16G服务器通用生产标配YAML配置参数key规范、数值合理无需额外修改直接上线。生产调优完整配置及参数详解# SpringBoot 生产环境Tomcat并发调优核心配置server:tomcat:# 核心1Tomcat工作最大线程数同时处理业务并发请求数threads:max:600# 核心2最小空闲常驻线程预热保留不用频繁创建销毁线程min-spare:80# 核心3请求排队等待队列容量线程占满后排队请求数accept-count:200# 核心4Tomcat最大TCP连接数支撑大量长连接、闲置连接max-connections:10000# 核心5连接超时时间避免无效长连接占用线程资源connection-timeout:20000调优后核心并发能力说明实时处理并发600个远超默认200应对日常业务峰值流量突发排队缓冲200个应对瞬间流量波动减少请求报错系统总承压能力800并发全局所有接口共享兼顾稳定性和并发量适配场景中小型商城、企业业务系统、公网用户端项目无需集群也能稳定承载日常峰值流量