首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-17 16:42
快手_后端开发
26年上岸圣体制内的机会大汇总(建议收藏)
1 公务员省考公告发布时间:1-2月陆续发布报名时间:1月-2月(各省独立)笔试时间:3月中旬(周六/日,预计3月14-15日)笔试内容:《行政职业能力测验》+《申论》报考渠道:各地公务员局官网2 上半年事业单位联考公告发布时间:1月上旬起陆续发布报名时间:2月2日(周一)09:00至2月6日(周五)18:00笔试时间:3月28日-29日笔试内容:《职业能力倾向测验》+《综合应用能力》,按岗位类别分为A、B、C、D、E五类试卷报考渠道:各省人事考试网3 教师招聘考试公告发布时间:3月起(各省不统一)报名时间:公告发布后1-2周内笔试时间:各省不同,一般为公告后1-2个月笔试内容:教育综合知识+...
春招进度记录
点赞
评论
收藏
分享
01-19 15:02
已编辑
南方科技大学 后端工程师
百度日常实习后端二面热经(没凉,已OC,感谢面试官捞捞)
进化为度孝子!不得不感叹面试真是很看运气,每个面试官的风格都不一样,这次面试官就不是很好说话,感觉不是很喜欢我,估计是挂了。上来就要手撕sql,这次发挥不佳,主要是被上来就让写sql吓到了,第一次遇到,没有准备好,导致后面问问题的发挥也不是很好,深入问的问题都没答上来1go与Java的线程模型的核心区别2用的什么ai工具开发代码3设计一个数据库系统查一个用户过去三十天的流水:表设计,sql查询,索引设计4外键的作用5这样设计有什么问题,如果有一亿用户,每个用户一亿流水,这么设计好吗,有数据泄露的风险嘛?6有外键还需要join嘛7如果查很多很多条数据很慢怎么办,我撤了一堆分库分表,explain...
冷艳的柠檬精要暴富:
二面怎么还问了这么多八股,还手写sql。还有代码题
查看16道真题和解析
点赞
评论
收藏
分享
01-11 16:10
山东科技大学 前端工程师
27前端找实习简历
各位大佬帮看看简历哪里需要改进,孩子想一月份找个实习
点赞
评论
收藏
分享
01-08 16:12
传音控股_算法工程师
招个好点的实习生这么难吗
面了5个实习生了,技术好的base不是特别考虑,base满足的技术又不太行,真难呀,各位优秀的学弟学妹们毛遂自荐呀【岗位职责】1. 算法优化与落地:重点参与图像编辑(Image Editing)领域的算法研究,特别是针对图像消除(Object Removal/Inpainting)任务的效果优化。2. 核心技术攻关:模型蒸馏:参与大规模生成模型的蒸馏工作,在保证生成质量的前提下,优化模型推理速度与显存占用。RLHF 对齐:探索并应用 RLHF(Reinforcement Learning from Human Feedback)技术,利用人类反馈数据优化生成模型的逻辑一致性与视觉美感。1. 实验与数据管理:负责相关算法实验的配置、运行与结果分析;协助进行高质量训练数据的清洗、整理与构建,建立更高效的数据 pipeline。2. 前沿探索:阅读最新顶会论文,复现并改进 SOTA 算法,探索提升消除任务鲁棒性的新方法。base:深圳薪资:200-400公司:传音邮箱:xin.wang4@transsion.com
点赞
评论
收藏
分享
01-16 14:18
CVTE _软件开发四部_TV系统软件工程师
嵌入式面经111题答案汇总(含技术答疑)_3大嵌入式项目源码分享—嵌入式Linux项目
全网最受欢迎的嵌入式面经 面经一共32篇文章,包含嵌入式面试高频必问考点,21w+同学学习,4900+订阅,非常适合在找工作面经薄弱的同学,订阅点击链接(承诺免费技术答疑): --> 《嵌入式/C++面试题解析大全》 1、简介 本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业工作经验,整理超全面111道嵌入式面试题目答案解析(承诺提供专栏内容免费技术答疑),本专栏内容主要有: 面试过程口头提问的问题答案汇总,承诺提供免费技术答疑,以及其他的交流,如要怎么入门c++,简历如何写,算法题如何刷等等,实现校招全陪伴! 2、项目经验 如果你找的是单片机,...
嵌入式转岗的难度怎么样
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
备战春招,网申一键填写工具,发布了!!!
3.6W
2
...
【评论得现金💰】26年度牛客评论活动起航!(试运行)
8862
3
...
27双非非科班4段实习从字节tt到腾讯wxg
7570
4
...
AI 军火库
4378
5
...
腾讯后端日常实习二面(已OC)+一点随笔
4275
6
...
字节校招landing实感
4139
7
...
专科工作一年后的心里话
3865
8
...
多益可以去吗
3251
9
...
拼多多被罚10万块,啊这...
3190
10
...
我爸对计算机行业的看法,是否准确?
3131
创作者周榜
更多
正在热议
更多
#
上班以后,你还有哪些坚持的爱好?
#
3804次浏览
105人参与
#
AI coding的好用工具分享
#
9912次浏览
208人参与
#
你最近因为什么迷茫?
#
21892次浏览
312人参与
#
拼多多工作体验
#
43424次浏览
280人参与
#
你都在哪些场所面过试?
#
10210次浏览
145人参与
#
实习怎么做才有更好的产出
#
6370次浏览
136人参与
#
找工作以来,你最看不惯__
#
6118次浏览
153人参与
#
实习生工资多少才算正常?
#
7653次浏览
136人参与
#
你给AI提过哪些离谱的需求?
#
3503次浏览
113人参与
#
哪些公司开春招了?
#
3719次浏览
56人参与
#
工作压力大怎么缓解
#
134046次浏览
1173人参与
#
领导做过最不靠谱的事
#
7423次浏览
139人参与
#
牛客AI文生图
#
19106次浏览
225人参与
#
国企/银行/研究所公司爆料
#
184945次浏览
893人参与
#
实习离职怎么跟领导说
#
74885次浏览
413人参与
#
实习教会我的事
#
49677次浏览
363人参与
#
如果秋招能重来,我会____
#
82755次浏览
479人参与
#
工作一周年分享
#
49313次浏览
247人参与
#
你觉得第一学历对求职有影响吗?
#
222905次浏览
1235人参与
#
AMA
#
12326次浏览
49人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务