首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 13:35
欣旺达_嵌入式软件工程师(准入职员工)
网易互娱内推,网易互娱内推码
网易**不管问你啥,记住一个话术原则小小的提醒下各位留子:**时不要直来直去有啥说啥;千万得多思考别说太满给自己留个思考或回旋的余地・1、被问 “有没有接触过网易的产品”(哪怕了解不多)别直接说 “没有”(容易显得缺乏兴趣)试试:“之前用过网易云音乐和网易新闻,对产品的界面设计和功能逻辑有过留意。虽然没有深入研究,但能感受到网易产品注重用户体验的特点,入职后会系统学习相关产品知识”・2、被问 “能接受高强度的项目加班吗”别勉强说 “没问题”(后续可能难以承受)试试:“我理解互联网行业项目推进时需要集中精力,在关键节点愿意配合团队加班。但也会注重提升工作效率,合理规划时间,尽量在正常工作时间完成...
点赞
评论
收藏
分享
01-16 15:24
阿里云_JAVA研发工程师(准入职员工)
正浩创新内推,正浩创新内推码
工作时间与强度工作时间:实行弹性工作制,上班时间为上午 09:00 - 下午 06:00,周末双休。工作强度:工作强度较大,部分研发岗位因项目进度安排紧张,加班到 11、12 点是常事。不过也有一些岗位可以准点下班。薪资福利有通讯补贴、补充医疗保险、餐饮补贴(一天 30 元)、节日福利、定期体检等。公司食堂饭菜半价,还有八折零食柜、免费咖啡等。工作氛围团队氛围:整体氛围比较年轻有活力,团队多为扁平化管理,队员之间有较高的决策权。比如 GTM 团队大部分都是 3C 消费厂出身,工作氛围活力四射,沟通效率较高。研发部的团队氛围也不错,同事之间互相帮助,经常一起讨论新产品方向,还会有团建活动。但也有...
正浩创新EcoFlow公司福利 707人发布
点赞
评论
收藏
分享
昨天 09:53
已编辑
北京市农工商联合总公司职工大学 测试其它
来来来看一下这是什么麦克🐶
快手字节华为腾讯b站美团引流
WhythZ:
这个人老是在各种帖子底下出现,复制粘贴他的那套一样的话术,看着就烦
实习怎么做才有更好的产出
点赞
评论
收藏
分享
01-20 10:49
正浩创新EcoFlow_海外销售(准入职员工)
正浩创新内推,正浩创新内推码
📦两个部分:上班感受+公司福利~ 上班感受:快节奏 体验感十足 ⭐️ 学习:每天时间很快也很累,感觉要学的要做的东西真的太多,我会不断的向内求,如果有问题我会及时记录然后及时询问前辈,作为刚入职小白,新知识根本学不完!抽空学! ⭐️ 通勤:住在公司附近所以步行十分钟左右,早上9:30打卡 也可以十点(如果你前一天加班到十点)奈何早上床成了我的老家😭早上必须咖一杯 一月可以迟到60m很人性化 五次补卡哈哈哈 ⭐️ 两周感悟:高效办公!合理分配时间!任务清单明确!把更多的时间花在有意义的内容上!!!抽闲暇时间做一些赶进度工作!勇敢! ⭐️ 部门氛围:同事和leader无敌好,来的第一周就请我们...
正浩创新EcoFlow公司福利 707人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
备战春招,网申一键填写工具,发布了!!!
2.9W
2
...
32岁程序员猝死,底薪3千要24h待岗
7513
3
...
【官方活动】牛客新春计划:给陌生人的一封信
6181
4
...
27双非非科班4段实习从字节tt到腾讯wxg
4849
5
...
我爸对计算机行业的看法,是否准确?
4110
6
...
字节校招landing实感
3565
7
...
第一次被同事气笑了
3426
8
...
坚持的爱好是规律饮食
3147
9
...
专科工作一年后的心里话
3120
10
...
实习摸鱼但很焦虑
3078
创作者周榜
更多
正在热议
更多
#
上班以后,你还有哪些坚持的爱好?
#
5674次浏览
161人参与
#
AI coding的好用工具分享
#
13620次浏览
295人参与
#
哪些公司开春招了?
#
7001次浏览
104人参与
#
实习怎么做才有更好的产出
#
9360次浏览
187人参与
#
你都在哪些场所面过试?
#
15511次浏览
200人参与
#
工作压力大怎么缓解
#
136384次浏览
1221人参与
#
找工作以来,你最看不惯__
#
9274次浏览
228人参与
#
你最近因为什么迷茫?
#
28430次浏览
422人参与
#
实习生工资多少才算正常?
#
10068次浏览
180人参与
#
实习教会我的事
#
51020次浏览
396人参与
#
非技术2024笔面经
#
458461次浏览
4930人参与
#
你给AI提过哪些离谱的需求?
#
4730次浏览
150人参与
#
职场破防瞬间
#
359023次浏览
2835人参与
#
拼多多工作体验
#
44083次浏览
283人参与
#
你想跟着什么样领导?
#
47083次浏览
235人参与
#
聊聊你的职场新体验
#
313880次浏览
1848人参与
#
如何缓解入职前的焦虑
#
251526次浏览
1441人参与
#
美团开奖
#
385158次浏览
1787人参与
#
领导做过最不靠谱的事
#
9233次浏览
176人参与
#
为了实习逃课值吗?
#
61801次浏览
517人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务