首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
01-31 15:11
浙江大学 算法工程师
C++面试八股文(Qt 数据库)
1. Qt中如何连接数据库?在 Qt 中,连接数据库的基本步骤如下:加载数据库驱动:Qt 支持多种数据库(如 SQLite、MySQL、PostgreSQL 等)。需要加载适当的数据库驱动。创建 QSqlDatabase 对象:通过 QSqlDatabase::addDatabase() 来创建一个数据库连接对象,并设置连接类型(例如 SQLite、MySQL)。设置连接参数:配置数据库连接的参数,如数据库文件路径、用户名、密码等。打开数据库:调用 open() 方法来打开数据库连接,并检查连接是否成功。2. QSqlDatabase、QSqlQuery、QSqlTableModel的作用是什...
C++八股文全集
点赞
评论
收藏
分享
昨天 20:16
网易游戏_客户端研发工程师(准入职员工)
网易互娱内推,网易互娱内推码
网易游戏-蛋仔派对-数据分析-已复盘自我介绍,重点讲讲你为什么想来游戏行业做一名数据分析师。某天发现《蛋仔派对》的日活跃用户比前一天断崖式下跌了 20%,如果交给你来分析,你的分析思路是什么?会从哪些方面入手排查原因?我们想通过优化新手教程来提升新用户的次日留存率,你会如何设计一个 A/B 实验来验证这个想法?在设计和分析过程中,需要特别注意哪些潜在的问题?你最近玩得最久或者最喜欢的游戏?你认为它在设计上最成功的一点是什么?如果让你用数据来证明你的观点,你会关注哪些数据?我们有一张玩家登录日志表(包含 user_id, login_time),请你说说计算次日留存率的 SQL 思路是怎样的?《...
点赞
评论
收藏
分享
01-30 11:09
河南科技大学 Java
年前入职,一般公司什么时候放假?
寒假一直找实习,一直面试被挂。本来都打算放弃后端,梭哈测试了。结果竟然有一个过了。但是人事说年前到岗,我看好像很多公司要放假了。那我该买几号回家的票?
皮影w:
直接问人事啊,很多事其实问一问你自己猜强一百倍
点赞
评论
收藏
分享
01-16 13:47
已编辑
湖南工业大学 iOS开发
提问
为啥某大厂看完简历都愿意发我面试,很多其他小厂都不约我面试啊,虽然现在这个大厂面试肯定过不去,想着去中小厂先学习学习,为啥中小厂都已读不回啊
小白罗恩:
确实,小公司钱不多眼光还贼高
秋招,不懂就问
点赞
评论
收藏
分享
01-28 21:16
库洛游戏_HR(准入职员工)
步步高内推,步步高内推码
步步高实验学校 2026届校招启动啦【学校简介】东莞市步步高实验学校于 2023 年投入运营,占地 230 亩,是一所集幼儿园、小学、初中、高中于一体的十五年一贯制非营利性高端民办学校,学校全面实行小班化教学,学校师生比为 1:5;步步高教育专家团队由来自一流大学的国家课标专家、教育学家,来自著名学校的卓越校长,来自一线、有着丰富教学经验的著名特级教师,以及来自国家级教育媒体的教育策划专家共同组成,为步步高的课程、教学、管理奠定了坚实基础。【招聘岗位】• 幼儿园、小学部及初中部各学科类教师 & 国际教师,类别多多,等你pick! 【福利待遇】• 薪资:幼儿园老师年收入16万起 、中小学...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
AI 应用开发学习全景路线图
1.5W
2
...
害怕被嘲笑就不去做了吗?
5898
3
...
大厂到底想要什么样的人???
5333
4
...
2026的你,应该知道哪些AI面试题?
2390
5
...
面试官视角聊聊,AI大模型产品到底是做什么的?
2363
6
...
字节财经业务一面凉经
1695
7
...
我用AI做了个小游戏,来玩!
1637
8
...
测试/测开方向刷题经验分享
1518
9
...
后端 offer选择
1380
10
...
因为简历太烂被培训班找上了吗
1045
创作者周榜
更多
正在热议
更多
#
在大厂上班是一种什么样的体验
#
4620次浏览
68人参与
#
找工作的破防时刻
#
251655次浏览
1953人参与
#
程序员找工作至少要刷多少题?
#
9318次浏览
146人参与
#
你投递的公司有几家约面了?
#
157786次浏览
995人参与
#
论秋招对个人心气的改变
#
5890次浏览
104人参与
#
我的AI电子员工
#
26137次浏览
159人参与
#
OPPO求职进展汇总
#
770926次浏览
5396人参与
#
为了减少AI幻觉,你注入过哪些设定?
#
1855次浏览
54人参与
#
刚入职的你踩过哪些坑
#
4192次浏览
91人参与
#
程序员能干到多少岁?
#
5766次浏览
90人参与
#
一张图晒一下你的AI员工
#
2944次浏览
62人参与
#
牛客AI体验站
#
3349次浏览
91人参与
#
我现在比当时_,你想录用我吗
#
3667次浏览
63人参与
#
想辞职但是不敢的原因
#
20157次浏览
88人参与
#
ai智能作图
#
624722次浏览
5627人参与
#
AI Coding的使用心得
#
2328次浏览
60人参与
#
关于春招/暑期实习,你想知道哪些信息?
#
3951次浏览
84人参与
#
牛客租房专区
#
146741次浏览
1464人参与
#
晒晒你司的新年福利
#
3974次浏览
70人参与
#
虾皮求职进展汇总
#
373393次浏览
2792人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务