首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
评论 9
全部评论
推荐
最新
楼层
还没有回复哦~
相关推荐
不愿透露姓名的神秘牛友
昨天 12:39
华为工作体验
首先,工作强度嘛,因人而异。研发的基本上都是9-11-5的节奏,确实是最累的岗位,但转岗机会也多,激励措施还不错。我咋采购部,相比下来还算轻松。再说说工作氛围,我在不同的小组待过,整体感觉还不错。大部分同事都很和气,大家一起努力,甩锅的现象少。入职培训NEO做得很不错,培训结束后会有导师带你4-6个月,考核也很严格,基本上都能顺利转正。考核压力嘛,确实不小。每半年一次,强制比例分布,13-14级的校招员工升级速度相对快,但供应链的名额少于研发。绩效决定了在华为的发展,大家都很看重KPI,内卷和心理压力也是常态。
华为工作强度 838人发布
点赞
评论
收藏
分享
11-24 13:35
云南大学 Web前端
避雷拼多多
网上都说这里是“11116”模式(早11晚11,一周6天),但实际上,工时会比这高得多,具体要看你所在的团队和老板。刚进公司的时候,很多同事都能在10点多就走,没有硬性要求加班。午餐和晚餐各有2小时的休息,感觉还算能接受,毕竟互联网公司加班是常态。不过,时间久了,工时越来越长,周末基本上都是单休,假期也少。还有个很无语的现象,就是部门间工时排名。每个部门的工时都会被拉出来比较。偶尔公司会严查一下,午休和晚休的时间会被缩短,HR会来查岗,没在位置上的同事会被记录下来
理想江南137:
同行业水平比较的话的确感觉需要避雷11.11.6这样的工作。但是自己却进不了这样的大厂
拼多多集团-PDD公司氛围 518人发布
点赞
评论
收藏
分享
10-18 20:30
西安电子科技大学 Java
爱华,信华,等华!
喜欢走神的孤勇者练习时长两年半:
爱华,信华,等华,黑华
点赞
评论
收藏
分享
10-22 10:02
门头沟学院 游戏策划
还得是字节
即使是字节的hr晚上十一点半也要坚守岗位😡
一颗宏心:
华为HR晚上过了十二点后还给我法消息。
点赞
评论
收藏
分享
昨天 18:33
CVTE_运营管理_HR
拿完offer再挑
目前池子里已经有很多同学泡着了,各个学校的三方也已经陆续开放,但是并不代表着签完三方就结束了,很多同学还会有违约考虑国企央企,所以10月到11月之间对于大部分同学来讲,还是没办法完全放松(已经拿到满意的offer的另说) ,还没有投的同学最后都投上吧,春招hc都不一定有秋招中期的剩下的hc多,直入主题,大家都关注的问题cvte加不加班?加还是加的,但是看部门,软硬件基本都是8点钟走其他的一些文职部门我看下班还是六点准时的而且不是强制,你事情做完可以走的,全天不打卡工资待遇怎么样?待遇还是挺不错,校招普遍都是10k以上,目前我见过最高的是18k的。福利待遇有哪些?五险一金啥的不用说了。住房公积...
投递CVTE等公司10个岗位 >
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
1
...
到了新公司,不要用力过猛
2.3W
2
...
校招两方/三方违约模板
1.5W
3
...
【发帖有奖💰】爆料秋招开奖进展❗
1.3W
4
...
万字长文讲透金融科技方向的就业机会
1.2W
5
...
从露宿街头到百万级种子轮融资②——我的实习期都经历了什么
1.1W
6
...
听学长的没错
7051
7
...
秋招圆满结束!!
6990
8
...
同事在会议室扇了自己好几个大嘴巴子
6431
9
...
华为开奖,详细时间线
6425
10
...
我也是好起来了,都能收到offer了
5163
正在热议
#
拼多多求职进展汇总
#
233857次浏览
2032人参与
#
在职场上,你最讨厌什么样的同事
#
5800次浏览
81人参与
#
阿里云管培生offer
#
59492次浏览
1750人参与
#
25届秋招总结
#
398484次浏览
3989人参与
#
哪些公司校招卡第一学历
#
32960次浏览
106人参与
#
地方国企笔面经互助
#
6599次浏览
16人参与
#
北方华创开奖
#
66119次浏览
549人参与
#
ai智能作图
#
22199次浏览
267人参与
#
硬件兄弟们 甩出你的华为奖状
#
78041次浏览
625人参与
#
实习,投递多份简历没人回复怎么办
#
2436485次浏览
34706人参与
#
工作中,你有没有遇到非常爱骂人的领导?
#
4751次浏览
47人参与
#
实习与准备秋招该如何平衡
#
723031次浏览
8551人参与
#
我的实习求职记录
#
6123495次浏览
83960人参与
#
如果再来一次,你还会选择这个工作吗?
#
111137次浏览
1117人参与
#
25届机械人为了秋招做了哪些准备?
#
25264次浏览
357人参与
#
签了三方后想毁约怎么办
#
18579次浏览
111人参与
#
如果你有一天可以担任公司的CEO,你会做哪三件事?
#
10040次浏览
216人参与
#
机械求职避坑tips
#
22437次浏览
242人参与
#
游戏求职进展汇总
#
52852次浏览
344人参与
#
夸夸我的求职搭子
#
132063次浏览
1360人参与
#
腾讯求职进展汇总
#
207699次浏览
1694人参与
#
实习想申请秋招offer,能不能argue薪资
#
35812次浏览
308人参与
牛客网
牛客企业服务