SpringBoot 可以同时处理多少请求

news2024/11/21 2:25:20

一、前言

首先,在Spring Boot应用中,我们可以使用 Tomcat、Jetty、Undertow 等嵌入式 Web 服务器作为应用程序的运行容器。这些服务器都支持并发请求处理的能力。另外,Spring Boot 还提供了一些配置参数,可以对 Web 服务器进行调优,以提高其并发处理能力。而我们大家都知道,Spring Boot应用默认使用的Web服务器(内嵌容器)为Tomcat,了解了以上内容,我们就知道,这个问题的本质就是一个Spring Boot应用,内嵌的Tomcat能够处理多少请求

二、相关配置

1、配置信息

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

2、配置说明

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。

3、案例说明

如果把Tomcat比作一家饭店的话,那么一个请求其实就相当于一位客人。min-spare就是厨师(长期工);max是厨师总数(长期工+临时工);max-connections就是饭店里的座位数量;accept-count是门口小板凳的数量。来的客人优先坐到饭店里面,然后厨师开始忙活,如果长期工可以干得完,就让长期工干,如果长期工干不完,就再让临时工干。

图中画的厨师一共15人,饭店里有30个座位,也就是说,如果现在来了20个客人,那么就会有5个人先在饭店里等着。如果现在来了35个人,饭店里坐不下,就会让5个人先到门口坐一下。如果来了50个人,那么饭店座位+门口小板凳一共40个,所以就会有10人离开。

也就是说,SpringBoot能同时处理的最大请求数量是max-connections + accept-count,超过该数量的请求直接就会被丢掉。

三、代码验证

1、测试代码

首先创建一个SpringBoot的项目,然后在application.yml里配置一下对应参数,默认最大连接数为8192,这里我们为了方便你测试,将最大连接数调整为40。

配置内容:

server:
  tomcat:
    threads:
      # 最少线程数
      min-spare: 10
      # 最多线程数
      max: 15
    # 最大连接数
    max-connections: 30
    # 最大等待数
    accept-count: 10

接口内容:

首先通过日志输出线程名称,然后休眠0.5秒,这样就会使得应用在处理请求时,无法一次性处理所有请求,从而让部分请求进入到等待队列。

@GetMapping("/test")
public Response test1(HttpServletRequest request) throws Exception {
    log.info("ip:{},线程:{}", request.getRemoteAddr(), Thread.currentThread().getName());
    Thread.sleep(500);
    return Response.buildSuccess();
}

 2、测试步骤

使用Apifox创建一个测试用例,来模拟100个请求,如果你不习惯使用这个工具的话,也可以使用jmeter来达到同样的测试效果。

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

 再结合控制台打印的日志不难看出,线程的最大编号是15,这也印证了前面的想法。

三、总结 

  • SpringBoot能同时处理的最大请求数量是max-connections + accept-count。
  • 如果并发请求数量低于server.tomcat.threads.max,则会被立即处理,超过的部分会先进行等待。
  • 如果数量超过max-connectionsaccept-count之和,则多余的部分则会被直接丢弃。
  • SpringBoot在处理请求时,会根据请求的数量,分批次进行处理。

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

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

相关文章

传输层协议——TCP、UDP

目录 1、UDP 协议(用户数据报协议) 协议特点 报文首部格式 2、TCP 协议(传输控制协议) 协议特点 报文首部格式 TCP连接建立时的三次握手 TCP拆除连接的四次挥手 TCP的流量控制 TCP的拥塞控制 3、传输层端口号 三类端口…

一维数组和二维数组的使用(int类型)

目录 导读1. 一维数组1.1 一维数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储 2. 二维数组2.1 二维数组的创建2.2 二维数组的初始化2.3 二维数组的使用2.4 二维数组在内存中的存储 博主有话说 导读 本篇主要讲解一维数组和二维数组的创建和使用&…

【软考】4.2 关系代数

《 关系代数 》 表和表之间的逻辑运算 笛卡尔积:S1 x S2 投影:π;选择某一列(属性);一个关系R的投影操作结果也是一个关系,记作Πa,它由从关系R中选出的A列元素构成;选择…

React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint

前言 我的项目版本如下: React: V18.2.0Node.js: V16.14.0TypeScript:最新版工具: VsCode 本文将采用图文详解的方式,手把手带你快速完成在React项目中配置husky、prettier、commitLint,实现编码规范的统…

OpenNebula的配置与应用(一)

学习了OpenNebula的安装之后,接下来就是配置OpenNebula,内容包括配置Sunstone,VDC和集群,设置影像,模板管理,虚拟机管理等。OpenNebula还有大量的工作要做,这些工作主要来自映像、模板和虚拟机管…

[架构之路-225]:计算机硬件与体系结构 - 分类方法大汇总: RISC, CISC

目录 一、分类方法汇总 二、指令流和数据流的关系分类 三、Flynn 分类:指令并行处理 四、根据指令集架构(ISA)分类 4.1 分类 4.2 开源的RISC-V与封闭的RISC指令集架构比较 4.3 RISC-V的演进路径 4.4 RISC-V与中国芯片自研 4.4 五阶流…

服务网关Gateway_入门案例

创建cloud-gateway-gateway9527工程 pom文件引入依赖 <dependencies><!-- 引入网关Gateway依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></depe…

基于SpringBoot的社区医院管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

修改npm全局安装的插件(下载目录指向)

我们先打开终端 然后执行 npm config get prefix查看npm 的下载地址 一般都会在C盘 但是 我们都知道 C盘下东西多了是很不好的 所以 我们可以执行 npm config set prefix “E:\npmfile”将 npm 的下载地址 改变成 E盘下的 npmfile目录 这样 以后 默认全局安装的插件就会都到…

Mesa新版来袭

Mesa 17.1.6 发布了&#xff0c;Mesa 是一个三维&#xff08;3D&#xff09;图形库的开源集合&#xff0c;其主要目标是在 Linux / UNIX 操作系统下实现各种 API&#xff08;应用程序编程接口&#xff09;和 OpenGL 规范。 它面向 3D 计算机图形&#xff0c;硬件加速 3D 渲染和…

获取上证50的所有股票代码

我们可以从网页&#xff08;板块 - 上证50_ - 股票行情中心 - 搜狐证券&#xff09;中获取&#xff0c; 然后打印出来&#xff1a; import requests from bs4 import BeautifulSoupurl "https://q.stock.sohu.com/cn/bk_4272.shtml" response requests.get(url) …

Python数据透视表

Python数据透视表 1、Excel数据透视表2、Python数据透视表 1、Excel数据透视表 数据透视表&#xff08;Pivot Table&#xff09;是一种交互式的表&#xff0c;可以进行某些计算&#xff0c;如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关 之所以称为数据透视表…

世界前沿技术发展报告2023《世界航天技术发展报告》(四)载人航天技术

&#xff08;四&#xff09;载人航天技术 1. 概述2. 美国多家商业公司开展载人航天发射和测试任务2.1 美国SpaceX公司载人“龙”飞船开展常态化载人任务&#xff0c;并完成首次全商业性太空载人任务2.2 美国蓝色起源公司成功开展两次亚轨道载人飞行任务2.3 美国波音公司“星际客…

Leecode121: 买卖股票的最佳时机1 2 3

第一个思路是从前往后进行遍历&#xff0c;记录一个最小值&#xff0c;然后往后维护一个最大值&#xff0c;不停的减去即可。 买卖股票的最佳时机2&#xff1a; prices [7,1,2,5,6,4] 在第二天买入&#xff0c;在第五天卖出&#xff0c;和不断买入卖出是一样的&#xff0c;所…

Vue中如何进行数据导出与Excel导出

当在Vue.js应用程序中需要进行数据导出并生成Excel文件时&#xff0c;你可以使用一些库和技术来实现这一功能。在本文中&#xff0c;我们将介绍如何在Vue.js中进行数据导出&#xff0c;以及如何将数据导出到Excel文件。我们将使用vue-json-excel库&#xff0c;它是一个用于将JS…

小狐狸ChatGPT付费创作系统V2.3.4独立版 +WEB端+ H5端 + 小程序最新前端安装测试教程

播播资源提供的GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。播播资源整体测试下来非常完美&#xff0c;本次播播资源提供的ChatGPT付费创作系统V2.3.4版本优化了很多细节&#xff0c;如…

42 将有序数组转换为二叉搜索树

将有序数组转换为二叉搜索树 题解1 DFS构建二叉搜索树&#xff08;平衡树&#xff09;【前序】题解2 中序 给你一个整数数组 nums &#xff0c;其中元素已经按 升序排列&#xff0c;请你将其转换为一棵 高度平衡二叉搜索树。 高度平衡二叉树是一棵满足「每个节点的左右两个子…

Vue中如何进行图片裁剪与上传

Vue中图片裁剪与上传的完整指南 在许多Web应用程序中&#xff0c;用户需要上传并裁剪图片&#xff0c;这是一项常见的任务。Vue.js作为一个流行的JavaScript框架&#xff0c;提供了一些强大的工具和库&#xff0c;可以简化这一过程。本文将介绍如何在Vue.js中进行图片裁剪和上…

sop流程图怎么做?sop流程图可以用什么做好?

标准作业程序sop对于现代生产企业来说是重关重要的一项经营改革&#xff0c;这种新型的管理运作方式既能够为企业节省资源、避免浪费、提高效率&#xff0c;也能够起到指导新员工有序无障碍的投入到工作当中的作用&#xff0c;可以最大程度上避免损耗。 所以一直以来&#xff0…

23.1 Bootstrap 表格

1. 表格 1.1 基础表格 Bootstrap5 通过在<table>元素中添加.table类来设置基础表格的样式.<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…