springboot应用程序并发请求达到多少会被拒绝

news2024/11/23 9:50:24

文章目录

  • 前言
  • 内嵌服务器
  • tomcat
    • 测试
  • undertow

前言

前几天刷B站看到了一个问题,感觉挺有意思的,“忽略接口本身性能,springboot应用程序能处理多少请求不被拒绝?”,今天便来探一探这个问题

本文主要重点是侧重于springboot应用程序内嵌服务器的并发请求处理能力以及参数,而非接口的QPS

本文测试使用的springboot版本为 2.3.12.RELEASE

image-20230530114423863

内嵌服务器

众所周知,springboot应用程序默认的内嵌服务是tomcat

image-20230530103647753

从pom.xml依赖跟踪后发现, springboot 2.3.12.RELEASE 默认使用内嵌服务器为tomcat 9.0.46

那么,默认情况下我们springboot应用程序能处理多少请求,取决于我们内嵌tomcat服务器配置

tomcat

从springboot官网翻阅,我们程序可配置的tomcat参数有很多,但结合配置的作用说明,我们整理发现如下几个参数与并发请求处理有关

点击查看官网配置

与并发请求处理相关配置

配置属性作用默认值
server.tomcat.accept-count当所有可能的请求处理线程都在使用中时,传入连接请求的最大队列长度。(等待队列长度)100
server.tomcat.threads.max工作线程的最大数量。200
server.tomcat.threads.min-spare工作线程的最小数量。10
server.tomcat.max-connections服务器在任何给定时间接受和处理的最大连接数。一旦达到限制,操作系统仍然可以接受基于“acceptCount”属性的连接。8192

当然我们也可以通过yml文件点过去进行查看其属性以及默认值

image-20230530114208417

那么,这四者的关系是什么呢?

并发处理性能:

server.tomcat.threads.maxserver.tomcat.threads.min-spare

这两个是关于工作线程数的配置,即我们服务器至多可启用多少个线程处理我们的请求,此配置为服务器并发处理能力强弱


可以看到,我在页面请求了23次,都被tomcat服务最小工作线程(10)个处理了,为什么线程没有突破10的界限?因为我的逻辑很简单,线程数能够应对我们请求的频次,只有无法应对请求频次时,服务器的线程数会突破最小线程数设置,不断扩容直至向最大线程数

image-20230530140249829

并发处理接受能力:

可以看作为承纳并发能力的容器能装多少东西


server.tomcat.max-connections 代表着tomcat服务器一定时间内可处理的最大连接数,server.tomcat.accept-count 代表着tomcat 等待队列;这两个配置便是我们今天要探究的程序请求并发接受能力

测试

@RequestMapping("hello")
@RestController
@Log4j2
public class HelloController {

    @GetMapping
    public String helloWorld() throws InterruptedException {
        log.info("当前处理线程:{}", Thread.currentThread().getName());
        TimeUnit.SECONDS.sleep(1);
        return "helloWorld";
    }
}

对应配置属性改为较小的值方便观察测试

server:
  port: 8080
  tomcat:
    threads:
      # 最小工作线程 (默认值为10)
      min-spare: 5
      # 最大工作线程(默认值200)
      max: 10
    # 最大请求连接数为(默认值8192)
    max-connections: 30
    # 等待队列长度为(可等待10个请求)(默认值100)
    accept-count: 5

image-20230530171521699

server:
  port: 8080
  tomcat:
    threads:
      # 最小工作线程 (默认值为10)
      min-spare: 5
      # 最大工作线程(默认值200)
      max: 10
    # 最大请求连接数为(默认值8192)
    max-connections: 20
    # 等待队列长度为(可等待10个请求)(默认值100)
    accept-count: 5

image-20230530173115510

经过测试,并发请求数大于 max-connections+ accept-count -1 时,我们的请求会被丢弃,抛出连接异常信息

image-20230530173250377

结论:

如果springboot应用程序使用了tomcat程序,那么其能够支持的请求数为 max-connections+ accept-count -1,如果不改配置的话则是(8192+100-1),即可以接收8291的数据慢慢处理,并发超过该数则会被拒接,请求也不会被处理了

undertow

todo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/589489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matplotlib常用函数总结

文章目录 1.IDE里的1.1 显示模式(plt.ion()和plt.ioff())1.2 backend说明 2 jupyter里的3 通用的3.1 cmap3.2 subplot()相关3.3 绘制动态图(Animation类)3.4 matplotlib利用rcParams配置样式参数 4. 与opencv连用可能遭遇的问题1.…

迭代器的设计原则

iterator必须提供5种associated types 1.iterator_category 2.value_type 3.diiference_type 4.pointer 5.reference 对于iterator_category来说,例如双向链表:typedef bidirectional_iterator_tag iterator_category;算法和迭代器的关系: 算法提问&a…

WAV 格式和音频裁剪、转码处理

文章目录 0、参考资料1、WAV 格式了解1.1 WAV 文件头1.2 RIFF Chunk 区块1.3 Format Chunk 区块1.4 Data Chunk 区块 2、音频剪裁 -> 解码 -> 编码2.1 mp32.1.1 裁剪2.1.2 解码2.1.3 编码 2.2 pcm 裁剪 0、参考资料 【音频处理】WAV 文件格式分析 ( 逐个字节解析文件头 …

用友BIP新一代全球司库,重塑企业资金管理新价值

资金是企业有效推进业务运营与发展并赖以生存的血液和养料,资金管理是企业财务管理的核心职能,在《“十四五”中央企业发展规划纲要》中明确央企要将集团资金管理业务规划置于重要战略位置。而国资委1号文发布,则进一步强调司库建设对中央企业…

2核2G3M腾讯云轻量应用服务器CPU性能测评

阿里云轻量应用服务器2核2G3M带宽一年95元,100%CPU性能,3M带宽下载速度384KB/秒,40GB SSD系统盘,月流量200GB,折合每天6.6GB流量,超出月流量包的流量按照0.8元每GB的支付流量费,地域节点可选广州…

vue+springboot前后端分离项目整合部署流程

我们在进行前后端分离开发的时候,一般是将前端项目部署到nginx服务器上,与后端项目分开部署,但是如果是个人开发的小型项目,不需要这么麻烦,直接将前后端项目放到一起部署即可。 本文就来介绍一下前后端项目一起部署的…

第一章 部署DHCP服务

♥️作者介绍:奇妙的大歪 ♥️个人名言:但行前路,不负韶华! ♥️个人简介:云计算网络运维专业人员 目录 DHCP:动态主机配置协议 1.DHCP的优点 2.DHCP的分配方式 3.DHCP的工作原理(租约过程…

winows搭建远程仓库Github(linux通用)

winows搭建远程仓库Github(linux通用) 文章目录 winows搭建远程仓库Github(linux通用)创建远程仓库配置SSH克隆项目多人协同开发代码冲突标签分支 创建远程仓库 以下操作为演示在Github网站上创建远程仓库 1.登陆注册Github 2.创…

Linux知识点 -- 进程概念(二)

Linux知识点 – 进程概念(二) 文章目录 Linux知识点 -- 进程概念(二)一、进程优先级1.概念2.进程中的优先级信息3.更改进程优先级4.进程切换 二、环境变量1.概念2.常见的环境变量3.环境变量相关命令4.通过代码获取环境变量5.环境变…

JDK相关知识

查看是否安装了jdk java -version 将输出当前系统上默认 Java 环境的版本信息,其中包括 JDK 的位数(64 位或 32 位)。如果输出中包括 “64-Bit” 或 “x64” ,则表示你的 JDK 是 64 位的;否则,它就是 32 位…

PackML 学习笔记

PackML 的官网 上如此描述PackML--- PackML是由OMAC开发并由ISA采用的自动化标准TR88.00.02,可以更轻松地传输和检索一致的机器数据。PackML的主要目标是鼓励整个工厂车间的通用“外观和感觉”,并支持和鼓励行业创新。 优点 这里的重点是通用“外观和感…

MySQL树状结构表查询通解

文章目录 前言一、数据准备二、代码实现三、案例使用1. 建立数据表实体类2. mapper文件3. 使用 四、总结 前言 ​ 最近做了一个中医药方面的项目,该项目分为游戏端和服务端。笔者负责的是服务端的开发。在服务端的业务中包含两部分:系统信息管理模块、游…

这是我见过对redis最直白的讲解,看完我哭了......

我是Redis 你好,我是Redis,一个叫Antirez的男人把我带到了这个世界上。 说起我的诞生,跟关系数据库MySQL还挺有渊源的。 在我还没来到这个世界上的时候,MySQL过的很辛苦,互联网发展的越来越快,它容纳的数…

0801向量及其线性运算-向量代数与空间解析几何

1 向量的概念 既有大小又有方向的量叫做向量(或矢量)。 表示 用有向线段表示向量: 向量大小:有向线段的长度向量方向:有向线段的方向 示例如下图1-1所示: 记法:字母上面加箭头 单字母&#x…

9.前后端的身份认证

1 web开发模式 开发模式有两种,一种是服务端直接返回html字符串,另一种是前后端分类 服务端直接返回html字符串是这样的 这样做的优缺点如下 优点 加载页面快,这样会让设备的能耗减小,对于移动端来讲更省电利于搜索引擎获取数…

北京筑龙吴英礼:ChatGPT在采购与招标中的应用

近日,由中国招标投标协会举办的“人工智能对招标采购数字化发展的机遇与挑战交流座谈会”在北京召开。北京筑龙CTO吴英礼受邀出席,围绕"ChatGPT在招标投标中的应用"进行探讨,从ChatGPT背后的的技术、ChatGPT助力招标投标行业数字化…

【C++】-8- string〔常见接口函数使用〕

文章目录 概览标准库中的string类「string类(了解)」﹝编码﹞ 「string类的常用函数接口」﹝1.string类对象的常见构造﹞﹝2.string类对象的修改操作﹞‹ c_str ›‹ npos ›‹ string结构 › ﹝3.string类对象的容量操作﹞‹ clear ›‹ reserve ›‹ r…

Pulsar 负载均衡与transaction_coordinator_assign

背景与现状 TC加载到哪个broker上取决于transaction_coordinator_assign-partition-${TC ID}分区加载到哪个broker上。 默认transaction_coordinator_assign有16个分区,因此默认有16个TC,我们需要根据集群机器/broker数目来设置合理的TC个数。 为了保证…

如何使用递归 Grep 命令在目录中搜索?

在 Linux 系统中,grep 是一个强大的文本搜索工具,可以用于在文件中查找指定的文本模式。当需要在目录及其子目录中搜索特定的文本时,可以使用递归 grep 命令来快速定位目标文件。本文将详细介绍如何使用递归 grep 命令来搜索目录中的文件。 递…

如何搭建第一个SpringBoot+MyBatis项目

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…