首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
11-05 22:30
西南大学 前端工程师
虾皮Shopee前端一面
📍面试公司:虾皮Shopee🕐面试时间:2025/11/4💻面试岗位:前端开发工程师❓面试问题:1、从在校经历和实习经历简单做个自我介绍2、说一下在上家公司的工作,访问量最高的页面是什么3、讲一下需求的生命周期,,需求是谁提出的,分配给谁,怎么跟各方进行联调,最终怎么部署上线4、在CSS里面最常用的单位?rem,em有什么区别,应用场景是什么5、有做移动端和PC端的样式兼容吗6、怎么实现一个栅栏布局,左右边栏是固定的,中间是响应式的,有几种实现方式7、怎么理解flex布局,它的设计理念,了解主轴和交叉轴吗8、CSS选择器的优先级,简单描述一下计算权重的四元组,计算规则9、简单说说CSS里...
查看28道真题和解析
点赞
评论
收藏
分享
昨天 21:01
中南大学 Java
每天一套面试题Day8-小红书(2)
11.说说缓存穿透、击穿、雪崩的区别 缓存穿透大量查询原本不存在的数打到数据库,缓存空值,布隆过滤器 缓存击穿是热key失效,设置逻辑过期,互斥锁 缓存雪崩是大量缓存同时失效。随机过期时间,提高缓存可用性,比如集群 12.从「敲下一个 URL」到「页面出现在屏幕」整条链路全景 先解析域名,协议,端口(https默认443,http强转https),DNS协议根据域名找到ip,TCP三次握手建立连接,IP协议帮助找到链路,到达服务器,服务器收到请求,返回页面信息,显示在屏幕上。 四次挥手 加上TCP头,IP头,MAC头(通过ARP协议知道以太网中对应的IP的MAC),在网卡加上报头和起始帧分界符...
投递小红书等公司10个岗位
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
10-03 21:58
不面了,菜狗躺平了,享受最后的学生生活,希望自己越来越好吧😋😋
点赞
评论
收藏
分享
11-05 11:54
门头沟学院 Java
秋招越来越抽象了
1.开始时间越来越早,措手不及,原来很多大厂8月份才开始招聘,今年很多7月就开始招聘了,像团子7月29日就开启了,很多像我这种暑假实习还没来多久,项目啥的没整理好,来不及马上准备投递,但还是早点准备,越早投递越好2.考核流程越来越繁杂,越来越累,以前我感觉投递完直接等着面试就好,现在倒好,投递完事,笔试,各种测评,AI面等等,想进到面试,都得搞一些没啥用的流程,进入面试,也有一面,二面,三面,HR面等等,而且每个考核都得认真搞,搞不好不及格直接挂,所以投递每个公司这一系列考核下来都很累,身心疲惫,但后面要是面试挂了,感觉自己之前的很多努力都白费了呜呜呜3.学历越来越看重,如下图秋招蜈蚣所示,很...
今年秋招是回暖还是遇冷
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
那个敢跟leader对线的实习生,现在怎样了
5343
2
...
数字马力一面(已挂)
4690
3
...
字节业务中台后端开发一面
3285
4
...
转测开是我大学生涯做过最正确的选择
2671
5
...
数字马力 一面
2321
6
...
实习才知道原来攒钱这么不容易(给新人小白)
2294
7
...
云智一面完变筛选中
2187
8
...
数字马力一面
2187
9
...
中兴逼签要接吗?最纠结的一集
1934
10
...
武汉-作业帮-三面-HR面
1662
创作者周榜
更多
正在热议
更多
#
你实习是赚钱了还是亏钱了?
#
31203次浏览
242人参与
#
CVTE求职进展汇总
#
23367次浏览
320人参与
#
联影求职进展汇总
#
51764次浏览
325人参与
#
用一句话形容你的团队氛围
#
18901次浏览
179人参与
#
中核求职进展汇总
#
28754次浏览
193人参与
#
你找工作是从容有余 or 匆忙滚爬?
#
12582次浏览
95人参与
#
京东开奖
#
474100次浏览
2688人参与
#
联影医疗求职进展汇总
#
6635次浏览
25人参与
#
毕业论文进行时
#
7138次浏览
81人参与
#
海康威视工作体验
#
45962次浏览
157人参与
#
同bg的你秋招战况如何?
#
175273次浏览
1022人参与
#
机械人与华为的爱恨情仇
#
137647次浏览
1013人参与
#
外包能不能当跳板?
#
47863次浏览
245人参与
#
嵌入式岗知多少
#
59010次浏览
548人参与
#
面对逼签的应对技巧
#
7757次浏览
39人参与
#
2022毕业即失业取暖地
#
116830次浏览
706人参与
#
找实习你看重大厂光环还是业务方向
#
41802次浏览
164人参与
#
我来点评面试官
#
17015次浏览
114人参与
#
哪些公司校招卡第一学历
#
220574次浏览
777人参与
#
扒一扒那些奇葩实习经历
#
127110次浏览
1100人参与
#
校招薪资来揭秘
#
2031次浏览
17人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务