返回顶部
首页 > 资讯 > 精选 >SpringBoot能同时处理多少请求
  • 773
分享到

SpringBoot能同时处理多少请求

2023-07-05 06:07:14 773人浏览 八月长安
摘要

这篇文章主要介绍“SpringBoot能同时处理多少请求”,在日常操作中,相信很多人在springBoot能同时处理多少请求问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot能同时处理多少请求

这篇文章主要介绍“SpringBoot能同时处理多少请求”,在日常操作中,相信很多人在springBoot能同时处理多少请求问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot能同时处理多少请求”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

正文

我们都知道,SpringBoot默认的内嵌容器Tomcat,也就是我们的程序实际上是运行在Tomcat里的。所以与其说SpringBoot可以处理多少请求,到不如说Tomcat可以处理多少请求。

关于Tomcat的默认配置,都在spring-configuration-metadata.JSON文件中,对应的配置类则是org.springframework.boot.autoconfigure.WEB.ServerProperties

SpringBoot能同时处理多少请求

和处理请求数量相关的参数有四个:

SpringBoot能同时处理多少请求

  • 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。

举个例子说明一下这几个参数之间的关系:

SpringBoot能同时处理多少请求

如果把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个请求:

SpringBoot能同时处理多少请求

观察一下测试结果:

SpringBoot能同时处理多少请求

从结果中可以看出,由于设置的 max-connections+accept-count 的和是40,所以有60个请求会被丢弃,这和我们的预期是相符的。由于最大线程是15,也就是有25个请求会先等待,等前15个处理完了再处理15个,最后在处理10个,也就是将40个请求分成了15,15,10这样三批进行处理。

SpringBoot能同时处理多少请求

再从控制台的打印日志可以看到,线程的最大编号是15,这也印证了前面的想法。

总结一下:如果并发请求数量低于server.tomcat.threads.max,则会被立即处理,超过的部分会先进行等待,如果数量超过max-connections与accept-count之和,则多余的部分则会被直接丢弃。

延伸:并发问题是如何产生的

到目前为止,就已经搞明白了SpringBoot可以同时处理多少请求的问题。但是在这里我还想基于上面的例子再延伸一下,就是为什么并发场景下会出现一些值和我们预期的不一样?

设想有以下场景:厨师们用一个账本记录一共做了多少道菜,每个厨师做完菜都记录一下,每次记录都是将账本上的数字先抄到草稿纸上,计算x+1等于多少,然后将计算的结果写回到账本上。

SpringBoot能同时处理多少请求

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();}

SpringBoot能同时处理多少请求

到此,关于“SpringBoot能同时处理多少请求”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: SpringBoot能同时处理多少请求

本文链接: https://www.lsjlt.com/news/350124.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot能同时处理多少请求
    这篇文章主要介绍“SpringBoot能同时处理多少请求”,在日常操作中,相信很多人在SpringBoot能同时处理多少请求问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot能同时处理多少请求...
    99+
    2023-07-05
  • python中异步IO怎么同时处理请求
    小编给大家分享一下python中异步IO怎么同时处理请求,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python主要应用领域有哪些1、云计算,典型应用OpenS...
    99+
    2023-06-14
  • ASP 中如何处理多个客户端同时请求的重定向?
    在ASP应用程序中,有时候需要将用户请求重定向到另一个页面或者网站。这个过程通常是通过向客户端发送一个HTTP重定向响应来实现的。然而,在多个客户端同时请求时,可能会出现一些问题,比如多个客户端同时请求同一个页面,但是只有一个客户端能够成...
    99+
    2023-07-03
    同步 重定向 并发
  • Springboot处理配置CORS跨域请求时碰到的坑
    最近开发过程中遇到了一个问题,之前没有太注意,这里记录一下。我用的SpringBoot版本是2.0.5,在跟前端联调的时候,有个请求因为用户权限不够就被拦截器拦截了,拦截器拦截之后打...
    99+
    2024-04-02
  • SpringBoot多线程进行异步请求的处理方式
    目录SpringBoot多线程进行异步请求的处理第一步:编写配置类第二步:对方法使用注解标注为使用多线程进行处理SpringBoot请求线程优化使用Callable来实现1、异步调用...
    99+
    2024-04-02
  • SpringBoot中怎么处理RESTful API请求
    SpringBoot是一个快速开发框架,提供了很多便捷的方式来处理RESTful API请求。在SpringBoot中处理RESTf...
    99+
    2024-03-07
    SpringBoot
  • redis如何处理多个请求
    Redis处理多个请求的方式主要有两种: 顺序处理:Redis是单线程的,它会按照请求的顺序依次处理每个请求。当有多个请求同时到...
    99+
    2024-04-03
    redis
  • JMeter——模拟多用户同时发送请求(三)
    第四章 JMeter模拟多用户同时发送请求 1、一个简单的压力测试实战 现有一个http请求接口http://localhost:8080/goods/to_list, 要使用Jmeter对其进行压测...
    99+
    2023-09-04
    jmeter java 服务器
  • SpringBoot+SpringSecurity怎么处理Ajax登录请求
    这篇文章主要讲解了“SpringBoot+SpringSecurity怎么处理Ajax登录请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot+SpringSecurity...
    99+
    2023-06-19
  • springboot对压缩请求的处理方法
    目录springboot对压缩请求的处理一、Tomcat设置压缩原理二、银联报文压缩补充:java springbooot使用gzip压缩字符串springboot对压缩请求的处理 ...
    99+
    2023-05-18
    springboot压缩请求 springboot请求
  • Springboot中怎么处理CORS跨域请求
    Springboot中怎么处理CORS跨域请求,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  一、什么是CROS  CORS Header  二、SpringBoot跨域请求...
    99+
    2023-06-02
  • 如何用java实现同时进行多个请求,可以将它们并行执行,从而减少总共的请求时间。
    1.使用线程池 通过使用Java提供的线程池,可以将多个请求分配到不同的线程中并行执行。可以通过创建固定数量的线程池,然后将请求分配给线程池来实现。线程池会自动管理线程的数量和复用,从而减少了线程创建和销毁的开销,提高了程序的性能。 ...
    99+
    2023-09-09
    java
  • 你知道PHP中如何同时处理并发的API请求吗?
    PHP是一种广泛使用的编程语言,其在Web开发中的应用广泛,特别是在处理API请求方面。但是,PHP在处理大量并发请求时会遇到一些问题。在本文中,我们将探讨如何在PHP中同时处理并发的API请求。 在PHP中,有几种方法可以同时处理并发的A...
    99+
    2023-10-26
    打包 并发 api
  • JavaScript使用promise处理多重复请求
    一、为什么要写这个文章? 处理重复请求的文章想必大家也看过了很多,大多数都是分为在response返回之前发现重复请求就return掉的和使用节流/防抖来间接规避用户频繁操作两种版...
    99+
    2024-04-02
  • SpringBoot如何配置Controller实现Web请求处理
    目录Controller处理请求创建Controller 类@Controller注解标识方法@RequestMapping测试Controller处理请求 由于 在建立 Sprin...
    99+
    2023-05-20
    SpringBoot配置Controller SpringBoot Controller处理请求
  • Springboot使用put、delete请求报错405的处理
    目录Springboot使用put、delete请求报错Springboot错误提示405状态一、错误提示405状态截图二、405状态的原因三、解决方法Springboot使用put...
    99+
    2024-04-02
  • 详解Spring中singleton bean如何同时服务多个请求
    目录正文先讲一下Spring容器稍微谈谈 Java 中的内存分配正文 当我开始学习 Spring 时,两个“难”的问题主要在我脑海中盘旋: 如何创建单例 b...
    99+
    2023-02-07
    Spring singleton bean多个请求 Spring singleton bean
  • 优化性能:Golang请求处理技巧
    优化性能:Golang请求处理技巧 随着互联网应用的流行,对于网站和服务端性能的要求也越来越高。在处理大量请求时,如何优化Go语言的性能成为了一个重要的问题。本文将介绍一些提高Gola...
    99+
    2024-02-28
    并发控制 异步处理 缓存利用 go语言
  • php请求超时转态码怎么处理
    今天小编给大家分享一下php请求超时转态码怎么处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。PHP请求超时状态码在PHP...
    99+
    2023-07-05
  • SpringBoot处理请求参数中包含特殊符号
    今天写代码遇到了一个问题,请求参数是个路径“D:/ExcelFile”,用postman测试时遇到的下图中的报错 java.lang.IllegalArgumentExceptio...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作