首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 10:52
门头沟学院 Java
面试官:为什么 String 要设计成 Final 类?
本文作者:****** 面试官:我看你简历上写了很多Java项目经验,那我们来聊聊Java基础。你知道为什么String要被设计成final类吗? 候选人:这个问题很有意思!我觉得主要是为了... 面试官:(微笑)不用急着回答,你可以从多个角度来思考这个问题。 引言:在Java编程中,String类是我们日常开发中使用最频繁的类之一。从简单的字符串拼接到底层的JVM优化,String的设计决策影响着整个Java生态系统的性能和安全性。String被设计为final类这一决定,看似简单却蕴含着深刻的设计哲学。这不仅是语言设计者的智慧结晶,更是保障Java程序安全稳定运行的基石。今天,我们就来深...
大学四年面经(学院本)
点赞
评论
收藏
分享
09-26 14:34
浙大宁波理工学院 Java
26届学院本只能试试转正实习了
太难了学院本😭
WhiteAlbum...:
学院本2中大厂垂直实习➕acm比赛 秋招0面试
点赞
评论
收藏
分享
09-01 15:36
中国科学院大学 后端工程师
秋招能找到吗
做个有文化的流氓:
Offer收割机
点赞
评论
收藏
分享
10-14 14:56
CVTE_web后台开发工程师(准入职员工)
CVTE内推,CVTE内推码
CVTE面经分享记录,摘自优秀牛油4月投的驱动开发实习,现在给我面试...也算是第一个面试了,感觉有些不是常规八股。1.内核是如何启动驱动的2.内核是如何与用户层进行交互,(回答比如说系统调用,共享内存),举一个系统调用的例子,(回答read),具体是 怎么实现的,系统调用是怎么进入内核的,最终调用的是内核的什么接口。3.I2c和spi的优劣,分别几根线,作用4.Uart波特率有哪些,项目中串口传输(也可能是指I2C)的数据包是什么格式的,怎么确保不丢包,怎么确定接收到的 就是想要的数据5.Main函数和中断中如果都用到了同一个函数,有什么值得注意的,如果都用到一个全局变量那6.使...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
族望留原籍,家贫走四方
9202
2
...
被秋招面试感动了
2007
3
...
实习越多越好还是越精越好?
1654
4
...
大厂这么卷,去国企,外企“上岸”?
1445
5
...
想问一下27届明年暑期实习大概什么时候开
1403
6
...
记录秋招 Offer 选择(从纠结到坚定)
1312
7
...
秋招总结,offer帮选
955
8
...
开源活动
873
9
...
【招银云创】秋招首offer
809
10
...
球球大家,给菜菜小弟一点建议
701
创作者周榜
更多
正在热议
更多
#
你现在会用到哪些AI技能?
#
10746次浏览
99人参与
#
腾讯工作体验
#
515107次浏览
3551人参与
#
未岚大陆求职进展汇总
#
9322次浏览
90人参与
#
大厂VS公务员你怎么选
#
35643次浏览
468人参与
#
我的求职进度条
#
106241次浏览
1333人参与
#
发面经攒人品
#
2631674次浏览
35919人参与
#
平安产险科技校招
#
1241次浏览
0人参与
#
我对___祛魅了
#
133179次浏览
740人参与
#
多益网络工作体验
#
55576次浏览
292人参与
#
你还有多少年退休?
#
27388次浏览
192人参与
#
来聊聊机械薪资天花板是哪家
#
145372次浏览
801人参与
#
工作中的卑微时刻
#
25481次浏览
175人参与
#
你有哪些缓解焦虑的方法?
#
35593次浏览
828人参与
#
小马智行求职进展汇总
#
14144次浏览
50人参与
#
机械人与华为的爱恨情仇
#
133019次浏览
1008人参与
#
实习在多还是在精
#
37592次浏览
266人参与
#
你觉得材料多少算高薪
#
26687次浏览
159人参与
#
顺丰求职进展汇总
#
64098次浏览
316人参与
#
你的房租占工资的比例是多少?
#
65934次浏览
803人参与
#
秋招踩过的“雷”,希望你别再踩
#
90105次浏览
1124人参与
#
实习下班不想学习,正常吗?
#
22933次浏览
188人参与
#
反问环节如何提问
#
116154次浏览
2476人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务