首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
09-19 10:56
门头沟学院 Python
部分大学到底有多离谱(实习篇)
大四学生申请校外实习,离校前 ?需要交齐材料(包含企业盖章,企业负责人签字,要求手写)????第一:离校前 ? 企业盖电子章?手写(人还没来就已经承担责任了)?让公司邮寄到学校?第二:你的意思是说,你还没去,让企业盖个空白章,然后签上责任书 ?
点赞
评论
收藏
分享
09-17 16:07
天津工业大学 嵌入式工程师
联想测评
题型非常新颖,挺有意思的。 测评前的练习一定要多做几遍,时间比较紧,一定要提前准备好草稿纸和笔,涉及计算的部分挺多的可以刷刷题库
投递联想等公司10个岗位
点赞
评论
收藏
分享
08-19 17:40
Java
公司开了这样一份离职证明
#离职证明#
吴offer选手:
666 打老板了吗
点赞
评论
收藏
分享
09-05 22:00
门头沟学院 视频编辑
被HR集体轰炸了
我想问问这正常吗😭,我一个普通本科,刚注册一下午,前前后后近一百个HR和我打招呼,我人傻了,根本回不过来,你们遇到过这种情况吗😭
熊大不大:
正常,我也是一堆来问,但是拿到我的简历之后就没有回应了
我的秋招日记
点赞
评论
收藏
分享
09-17 18:56
柠檬微趣_数据库内核测试工程师(准入职员工)
柠檬微趣内推,柠檬微趣内推码
**面经:暑假投递,面试时间线拉的比较长自我介绍实习经历介绍问了我他们公司有什么产品,让我说一款的细节设置,以及和竞品的细节差异在这个游戏设计一个中秋节主题关卡,应该怎么设计,什么思路?现在的关卡设置有什么需要改进的地方?休闲游戏的目标客户群体?有什么理解?休闲游戏符合设置付费点?什么品类的游戏是经久不衰的?🍋【柠檬微趣26届秋招】火热开启!一周极速Offer,职等柠来!✔ 研发发行《宾果消消消》《浪漫餐厅》《梦幻旅行》等爆款手游✔ 中国手游发行商出海收入排行榜Top 5✔ 合成手游赛道全球收入No.1的发行商📍 工作地点:北京市西城区🔥 秋招亮点✅ 岗位全覆盖:游戏开发、数据分析、游戏...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
秋招完全失败,想和美团字节爆了😅
1.9W
2
...
机械面试八股之机械设计高频考点
1.3W
3
...
offer还在路上, 但段子已经杀疯了!
1.2W
4
...
签完三方了,分享下我的谈薪小技巧
1.0W
5
...
拼尽全力背八股依然被问懵
7031
6
...
度小满Java一面
4349
7
...
神评第二期:本季最佳演技奖:假装不在乎的应届生们
3612
8
...
小红书这池子这么大吗
3243
9
...
深圳停工了,我将以牛友单身起誓换来假期
3233
10
...
双非拿下字节转正,我想我做对了这些事情
3039
创作者周榜
更多
正在热议
更多
#
面试时间长是好事吗?
#
20447次浏览
182人参与
#
如何看待应届生身份?
#
150208次浏览
1512人参与
#
思朗科技求职进展汇总
#
4558次浏览
87人参与
#
提名点击就挂的公司
#
25754次浏览
126人参与
#
入职跑路最快的一次经历
#
3784次浏览
57人参与
#
校招谈薪技巧
#
7748次浏览
168人参与
#
乐堡互娱校招
#
5845次浏览
93人参与
#
___岗狗都不干,我干!
#
2387次浏览
29人参与
#
拿到offer之后,可以做些什么
#
4584次浏览
55人参与
#
双非本科的出路是什么?
#
149058次浏览
1334人参与
#
国企秋招,你投了吗?
#
2260次浏览
39人参与
#
你在职场中沾染到的“坏”习惯
#
2377次浏览
38人参与
#
面试被问第一学历差时该怎么回答
#
168242次浏览
1091人参与
#
机械/制造每日一题
#
65904次浏览
1079人参与
#
大学四年该怎么过,才不算浪费时间?
#
10032次浏览
67人参与
#
秋招后遗症
#
34432次浏览
295人参与
#
你投递的公司有几家约面了?
#
131811次浏览
901人参与
#
机械人,你在招聘流程中的企业有哪些?
#
31358次浏览
236人参与
#
TCL华星光电工作体验
#
4401次浏览
19人参与
#
材料人的华为红黑体验
#
29311次浏览
171人参与
#
生物制药/化工校招攻略
#
58552次浏览
313人参与
#
饿了么求职进展汇总
#
73961次浏览
677人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务