首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
harrycoding
青岛科技大学 Java
发布于河北
关注
已关注
取消关注
学到了
@已删除:
SpringBoot可以同时处理多少请求?
前言前两天面试的时候,面试官问我:一个ip发请求过来,是一个ip对应一个线程吗?我突然愣住了,对于SpringBoot如何处理请求好像从来没仔细思考过,所以面试结束后就仔细研究了一番,现在就来探讨一下这个问题。正文我们都知道,SpringBoot默认的内嵌容器是Tomcat,也就是我们的程序实际上是运行在Tomcat里的。所以与其说SpringBoot可以处理多少请求,到不如说Tomcat可以处理多少请求。关于Tomcat的默认配置,都在spring-configuration-metadata.json文件中,对应的配置类则是org.springframework.boot.autoconfigure.web.ServerProperties。和处理请求数量相关的参数有四个:server.tomcat.threads.min-spare:最少的工作线程数,默认大小是10。该参数相当于长期工,如果并发请求的数量达不到10,就会依次使用这几个线程去处理请求。server.tomcat.threads.max:最多的工作线程数,默认大小是200。该参数相当于临时工,如果并发请求的数量在10到200之间,就会使用这些临时工线程进行处理。server.tomcat.max-connections:最大连接数,默认大小是8192。表示Tomcat可以处理的最大请求数量,超过8192的请求就会被放入到等待队列。server.tomcat.accept-count:等待队列的长度,默认大小是100。举个例子说明一下这几个参数之间的关系:如果把Tomcat比作一家饭店的话,那么一个请求其实就相当于一位客人。min-spare就是厨师(长期工);max是厨师总数(长期工+临时工);max-connections就是饭店里的座位数量;accept-count是门口小板凳的数量。来的客人优先坐到饭店里面,然后厨师开始忙活,如果长期工可以干的完,就让长期工干,如果长期工干不完,就再让临时工干。图中画的厨师一共15人,饭店里有30个座位,也就是说,如果现在来了20个客人,那么就会有5个人先在饭店里等着。如果现在来了35个人,饭店里坐不下,就会让5个人先到门口坐一下。如果来了50个人,那么饭店座位+门口小板凳一共40个,所以就会有10人离开。也就是说,SpringBoot同时所能处理的最大请求数量是max-connections+accept-count,超过该数量的请求直接就会被丢掉。纸上得来终觉浅,绝知此事要躬行。上面只是理论结果,现在通过一个实际的小例子来演示一下到底是不是这样:创建一个SpringBoot的项目,在application.yml里配置一下这几个参数,因为默认的数量太大,不好测试,所以配小一点: server: tomcat: threads: # 最少线程数 min-spare: 10 # 最多线程数 max: 15 # 最大连接数 max-connections: 30 # 最大等待数 accept-count: 10再来写一个简单的接口: @GetMapping("/test") public Response test1(HttpServletRequest request) throws Exception { log.info("ip:{},线程:{}", request.getRemoteAddr(), Thread.currentThread().getName()); Thread.sleep(500); return Response.buildSuccess(); }代码很简单,只是打印了一下线程名,然后休眠0.5秒,这样肯定会导致部分请求处理一次性处理不了而进入到等待队列。然后我用Apifox创建了一个测试用例,去模拟100个请求:观察一下测试结果:从结果中可以看出,由于设置的 max-connections+accept-count 的和是40,所以有60个请求会被丢弃,这和我们的预期是相符的。由于最大线程是15,也就是有25个请求会先等待,等前15个处理完了再处理15个,最后在处理10个,也就是将40个请求分成了15,15,10这样三批进行处理。再从控制台的打印日志可以看到,线程的最大编号是15,这也印证了前面的想法。总结一下:如果并发请求数量低于server.tomcat.threads.max,则会被立即处理,超过的部分会先进行等待,如果数量超过max-connections与accept-count之和,则多余的部分则会被直接丢弃。延伸:并发问题是如何产生的到目前为止,就已经搞明白了SpringBoot可以同时处理多少请求的问题。但是在这里我还想基于上面的例子再延伸一下,就是为什么并发场景下会出现一些值和我们预期的不一样?设想有以下场景:厨师们用一个账本记录一共做了多少道菜,每个厨师做完菜都记录一下,每次记录都是将账本上的数字先抄到草稿纸上,计算x+1等于多少,然后将计算的结果写回到账本上。Spring容器中的Bean默认是单例的,也就是说,处理请求的Controller、Service实例就只有一份。在并发场景下,将cookSum定义为全局变量,是所有线程共享的,当一个线程读到了cookSum=20,然后计算,写回前另一个线程也读到是20,两个线程都加1后写回,最终cookSum就变成了21,但是实际上应该是22,因为加了两次。 private int cookSum = 0; @GetMapping("/test") public Response test1(HttpServletRequest request) throws Exception { // 做菜。。。。。。 cookSum += 1; log.info("做了{}道菜", cookSum); Thread.sleep(500); return Response.buildSuccess(); }如果要避免这样的情况发生,就涉及到加锁的问题了,就不在这里讨论了。
点赞 84
评论 8
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
12-02 11:22
小红书_后端开发工程师(准入职员工)
小红书内推,小红书内推码
红书 2026校园招聘全球启动!毕业两年内均可投递面向对象:在2023.9-2026.8时间内毕业的全球本硕博招聘岗位:算法,研发,产品,设计,运营,商业,数据,职能(每位同学可投递2个志愿)- 技术类岗位需求是去年的2.5倍- 非技术类今年新增多个岗位工作城市:上海,北京,杭州,深圳,武汉关于我们:最TOP的薪酬待遇,最FAST的成长速度,最HIGH的职场氛围,最STRONG的资源支持…投递链接:https://job.xiaohongshu.com/link?referer_code=62KX6SI0KT3H内推码:62KX6SI0KT3H✅每人可以投递2个志愿;期待和优秀的你一起用技术定...
投递小红书等公司6个岗位
点赞
评论
收藏
分享
12-01 10:16
360集团_运维开发工程师(准入职员工)
360集团内推,360集团内推码
360真的超好,也碰到了很好的mentor,小组氛围巨好。实习期间完整的做了两个项目,感谢mentor的信任,愿意把一些实打实的内容让我做,完全没有做一些dirty work,可以说是充实的过了三个月,感觉抵得上在学校一年,后悔没有早点来这里。360对实习生真的巨好,不管是mentor还是能给到的资源,感觉在大厂中也是少见的,我为360打call!!! 在360这样的企业里,管理上非常的扁平化,没有严苛的上下级关系,这一点就非常让人舒服。 同时公司也会给员工很多成长和锻炼的机会,比如说定期的各类型专业知识的培训啊,还有很多接触大项目的机会。只要你肯学习和努力,就一定会有收获。 同事之间的关系也...
360集团公司氛围 420人发布
点赞
评论
收藏
分享
11-06 08:17
枣庄学院 Java
27届学院本java求拷打
想在寒假之前找个实习,有没有牛爷爷给点建议。😭😭😭
点赞
评论
收藏
分享
10-29 18:20
济南大学 Java
😓😓
#实习#
用微笑面对困难:
他不是人事吗,怎么净特么不干人事
点赞
评论
收藏
分享
12-02 14:01
门头沟学院 Java
测试
佰钧成校招投的是测试岗,但是开发简历投的(我的开发简历特别烂)1.自我介绍2.介绍项目(我的是苍穹外卖)3.项目背景4.负责模块5.mvc在项目的运用6.前端发送了一个http请求,如何路由到后端,后端怎么接收7.乐观锁和悲观锁(这个只要你写了,一般就会问)8.平时有使用抓包的一些工具吗9.http请求包括什么,他属于哪一层10.外卖平台的话,那我们平台设计了三种类型的优惠券。优惠券啊第一种类型是呃订单的满减券。嗯,对,第二种类型是指定商品的打折券,打个固定折扣八折或者九折。那第一种券和第二种券两者是互斥的那意味着在同一笔订单,用户在买同一个这个订单的商品里面,他下单的时候,就算他有两种券,两...
查看10道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
TCP/IP高频面试题--可爱图片版
1.1W
2
...
有点东西~牛客和14位牛友一起做了个官网投递插件
8136
华为开奖交流
热聊中
3
...
兄弟们走路不要刷牛客😭
1886
4
...
双非本科结束秋招~
1753
5
...
2025年对你来说是怎样的一年?
1627
6
...
翘课去实习的那些人后来怎么样了
1549
7
...
回顾下25年,感想颇多
1479
8
...
快手日常实习面经(已oc)
1300
9
...
PPIO - Serverless AI 后端 二面 一小时
1017
10
...
今年的校招薪资情况竟然是这样....
946
创作者周榜
更多
正在热议
更多
#
uu们,春招你还来吗?
#
13467次浏览
90人参与
#
硬件兄弟们 甩出你的华为奖状
#
117235次浏览
699人参与
#
百融云创求职进展汇总
#
248次浏览
0人参与
#
哪一瞬间让你觉得“这班不如不上”
#
12517次浏览
160人参与
#
面试紧张时你会有什么表现?
#
16002次浏览
131人参与
#
工作前VS工作后,你的心态变化
#
14291次浏览
161人参与
#
Offer比较,你最看重什么?
#
240744次浏览
1483人参与
#
2025年终总结
#
13982次浏览
222人参与
#
第一份工作能做外包吗?
#
86994次浏览
583人参与
#
为了去实习,我赌上了___
#
22443次浏览
207人参与
#
总结:哪家公司最喜欢泡池子
#
155647次浏览
560人参与
#
应届生初入职场,求建议
#
278990次浏览
2838人参与
#
父母对你找工作是助力还是阻力?
#
14226次浏览
204人参与
#
高薪高压 vs 低薪wlb,你怎么选?
#
12651次浏览
140人参与
#
互联网公司评价
#
459191次浏览
4041人参与
#
一人推荐一个值得做的项目
#
10102次浏览
140人参与
#
十二月请对我好一点
#
26117次浏览
342人参与
#
和牛牛一起刷真题
#
118681次浏览
2085人参与
#
学历or实习经历,哪个更重要
#
202802次浏览
1076人参与
#
毕业论文进行时
#
16961次浏览
112人参与
#
25届网易互娱暑实进度
#
91901次浏览
750人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务