首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-14 11:22
传音控股_技术运维工程师(准入职员工)
传音内推,传音内推码
我投递的是供应链的岗位,有需求的宝宝可以参考一下~ 一开始投递简历后,会有一个线上测评,大家可以去一些软件刷刷题再去做(因为这个题库有时候真的有点怪怪的),通过后经过漫长的审批,有些岗位会有专业测试(研发岗之类的),然后又是漫长的审批,你就会进入面试阶段啦! 首先是11月中旬的时候hr会打一个电话面试: 时间不一定,早中晚都有可能,当时我以为是骚扰电话给挂了,幸好hr小姐姐打了第二个,听说有人挂了之后就没有接到第二个电话了,大家一定要注意(广东)种地方的来电!!!说不定就是你的面试通知!!! 电话面的问题: 1.对传音的了解(可以多搜索传音相关的资料了解) 2.对薪资的期望(看个人需求) 3....
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
09-16 16:54
人生第一个大厂实习结束!
寒窗苦读多年终于结束了人生第一个大厂实习——小米 1.landing期体验:入职第一天就要碎掉了,什么也不会,快节奏的工作氛围,拥挤的工位,吓的当场就想离职……前两周各种出错,sorry说了不知道多少次,还好遇到的mt姐姐很有耐心,没有骂我😭2.工作强度:到点下班是奢望,有时候活儿做完了都不太敢走。怕被盯上说工作不饱和😭好想念上一次传统行业的实习生活,一过了下班点儿三分钟办公室都没人了的美感💧 3.福利待遇:本科每天能拿200-300,三餐全免费不用花钱,平时有下午茶、健身房也能随便用,mt心情好的时候还会请你喝奶茶,整体氛围还可以🉑️4.工作感受:最大的感受是有你需要有很多自主性,大...
投递小米集团等公司10个岗位
点赞
评论
收藏
分享
09-04 00:09
珠海艺术职业学院 贸易跟单
请给我offer
AC鸽想进大厂:
你是我见过最美的牛客女孩
点赞
评论
收藏
分享
09-15 12:00
门头沟学院 Java
帆软后端二面面经
二面1. Redis 的 RDB 和 AOF 两种持久化机制有什么区别?2. 混合持久化是怎么工作的?3. 讲一下你的项目里,用 JWT 做用户认证的整个流程。4. ThreadLocal 的哪部分数据可能会导致内存泄漏?5. 如果用户在后端改了密码,怎么让这个用户之前的 JWT 令牌都失效?6. 讲一下什么是缓存雪崩,怎么解决?7. 除了给缓存时间加个随机值,还有什么其他办法能防止缓存雪崩?8. 讲一下布隆过滤器。9. Redis 有哪些常用的数据淘汰策略?10. 如果让你自己实现一个 LRU 缓存,你会怎么做?11. Java 的 JVM 内存分为哪几个区?12. 直接内存是归 JVM 管...
查看20道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
银行秋招
3.5W
2
...
华为主管面准备笔记/适用于一切HR面经验贴
1.3W
3
...
27双非被美团激情拷打3h
6477
4
...
这,就是你想看的爽文嘛?
4511
5
...
来听我1000份面试经历的个人打分
3579
6
...
招银网络科技 - 最恶心的面试
3150
7
...
携程笔试
3141
8
...
TP-Link 芯片事业部全员解散?
2967
9
...
阿里菜鸟-JAVA研发一二面(已挂)
2702
10
...
【26秋招】我是如何从男模上岸大厂程序员----上岸前的苦苦挣扎(2)
2379
创作者周榜
更多
正在热议
更多
#
从顶到拉给所有面过的公司评分
#
27035次浏览
224人参与
#
晒晒你的中秋福利
#
16201次浏览
123人参与
#
为了求职,我做过的疯狂伪装
#
14510次浏览
301人参与
#
bilibili求职进展汇总
#
93260次浏览
833人参与
#
职场破冰,你们都聊什么?
#
8580次浏览
81人参与
#
工作压力大怎么缓解
#
105914次浏览
1053人参与
#
你面试被问到过哪些不会的问题?
#
25588次浏览
880人参与
#
机械笔面试考察这些知识点
#
11108次浏览
96人参与
#
聊聊这家公司值得去吗
#
563184次浏览
3728人参与
#
秋招的嫡长offer
#
36105次浏览
324人参与
#
电网笔面经互助
#
47407次浏览
431人参与
#
秋招报数:你投了多少家公司?
#
31974次浏览
327人参与
#
你的公司给实习生发中秋礼物吗
#
2838次浏览
32人参与
#
百度秋招提前批进度
#
152445次浏览
1779人参与
#
上班摸鱼,你都在干些什么?
#
7797次浏览
127人参与
#
宣讲会你有哪些意向不到的收获
#
2237次浏览
25人参与
#
大家实习每天都在干啥
#
89758次浏览
518人参与
#
机械人春招想让哪家公司来捞你?
#
358131次浏览
3113人参与
#
广联达求职进展汇总
#
11689次浏览
50人参与
#
实习要如何选择和准备?
#
114851次浏览
1437人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务