详解SpringBoot同时可以处理多少请求

 更新时间:2024年06月20日 10:58:08   作者:苏生Susheng  
在日常操作中,相信很多人在SpringBoot能同时处理多少请求问题上存在疑惑,本文就来详细的介绍一下,感兴趣的可以了解一下

问题

之前看到过一个面试题:SpringBoot同时可以处理多少请求?

  • 准确的来说,Spring Boot 同时可以处理多少个请求,并不取决于 Spring Boot 框架本身,而是取决于其内置的 Web 容器(因为 Web 容器的行为,决定了 Spring Boot 的行为,所以咱们姑且认为两个问题的回答是一样的)。
  • Tomcat的默认最大连接数是200,可以通过配置文件或者编程方式进行调整。另外,Spring Boot还支持使用其他的Web容器,如Jetty或Undertow,这些容器的性能表现可能不同。
  • 除了Web容器的配置,应用程序的设计也会影响并发处理能力。合理的线程池配置、异步处理和优化数据库查询等技术手段可以提高应用程序的并发处理能力。

Web三大容器

  • Web三大容器:Tomcat、Jetty、Undertow,众所周知,Tomcat 为 Spring Boot 框架默认的 Web 容器

三者区别

Tomcat

  • Tomcat 是 Apache 软件基金会下的开源项目,是最广泛使用的 Servlet 容器之一,完全实现了 Java Servlet 和 JavaServer Pages(JSP)规范。
  • 它不仅是一个 Servlet 容器,也是一个轻量级的应用服务器,尽管相比其他轻量级服务器,Tomcat 被认为是稍微重一些的。
  • Tomcat 支持众多的企业级特性,如 SSL、连接池等,适合运行大型的、复杂的企业级应用。
  • 它的稳定性和成熟度经过了多年的企业级应用验证,因此在很多企业中作为首选的 Web 容器。

Undertow

  • Undertow 是 Red Hat(红帽公司)开发的一个灵活的、高性能的 Web 服务器和反向代理服务器,它是 WildFly 应用服务器的默认 Web 容器。
  • Undertow 设计上注重低内存占用和高并发处理能力,尤其擅长处理大量的短连接场景,比如 RESTful API 服务。
  • Undertow 支持 Servlet 3.1、WebSocket以及非阻塞 IO(NIO),并且是支持 HTTP/2 协议的现代服务器之一。
  • 它的设计理念在于提供一个模块化、可嵌入式的解决方案,易于集成到现有的系统中,同时也适合微服务架构。

Jetty

  • Jetty 是一个开源的、轻量级的 Web 服务器和 Servlet 容器,由 Eclipse 基金会维护。
  • 它以其可嵌入式、高度可配置性著称,常用于需要快速启动和轻量级部署的场景,比如开发阶段、测试环境或轻量级应用。
  • Jetty 也支持 Servlet 规范和 WebSocket,且同样基于 NIO,使得它在处理大量并发连接时表现出色。
  • Jetty 设计上强调灵活性和可扩展性,易于通过 API 定制以满足特定需求,因此在云环境、持续集成、DevOps 等领域很受欢迎。

小结

特性TomcatJettyUndertow
出现时间1999年1994年2008年
支持的协议HTTP, HTTPS, AJPHTTP, HTTPS, SPDY, AJPHTTP, HTTPS, SPDY
内存占用相对较大相对较小相对较小
启动速度相对较慢相对较快相对较快
性能中等
异步支持支持支持支持
部署方式WAR, JAR, 打包为可执行JARWAR, JAR, 打包为可执行JARWAR, JAR, 打包为可执行JAR
可嵌入性支持支持支持
社区支持非常活跃活跃活跃
成熟度成熟成熟较新但持续发展

总的来说

  • Tomcat 因其成熟稳定和企业级特性适用于大型应用;
  • Undertow 以高性能和低内存占用见长,特别适合处理高并发短连接场景;
  • 而 Jetty 则以轻量、灵活、易于嵌入为特点,适合快速开发和轻量级部署。

最大连接数和最大等待数

以 Spring Boot 框架默认的 Web 容器 Tomcat 为例,它能够同时处理多少个请求,其实是在 Spring Boot 框架中的 spring-configuration-metadata.json 文件中配置着

在这里插入图片描述

打开此文件,搜索“server.tomcat.max-connections”(Tomcat 最大连接数)会得到以下结果:

在这里插入图片描述

也就是说,默认情况下 Tomcat 允许的最大连接数是 8192(=8*1024)个。

注意!! 虽然 Tomcat 可以允许最大的连接数是 8192,但是 Tomcat 还有一个最大等待数,也就是说,如果达到了 8192 之后,还有一个等待队列可以存放请求的连接,所以,Spring Boot 可以同时处理多少个连接,等于 Tomcat 的最大连接数加 Tomcat 的最大等待数。

搜索“server.tomcat.accept-count”(Tomcat 最大等待数),搜索结果如下图所示

在这里插入图片描述

也就是说,默认情况下,Tomcat 最大等待数为 100 个。

同时处理请求数

  • 上面得出结论:默认情况下 Spring Boot 能够同时处理的请求数=最大连接数(8192)+最大等待数(100),结果为 8292 个。
  • 当然,这两个值是可以在 Spring Boot 配置文件中修改的,如下配置所示
server:
  tomcat:
    max-connections: 2000 # 最大连接数
    accept-count: 200 # 最大等待数

拓展:设置Web容器

pring Boot 框架如何设置 Web 容器为 Jetty 或 Undertow 呢

设置容器为Jetty

要设置 Spring Boot 框架的 Web 容器为 Jetty,只需要修改 pom.xml 文件即可,如下配置所示:

<dependencies>
    <!-- Spring Boot Starter Web 但排除Tomcat -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 排除Tomcat -->
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 添加Jetty起步依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
</dependencies>

也就是说,只需要将默认的 tomcat 排除掉,添加 jetty 的依赖即可。

设置容器为Undertow

要设置 Spring Boot 框架的 Web 容器为 Undertow 的思路和上面 Jetty 的实现思路相同,只需要修改 pom.xml 文件即可,如下配置所示:

<dependencies>
    <!-- Spring Boot Starter Web 但排除Tomcat -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 添加Undertow起步依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-undertow</artifactId>
    </dependency>
</dependencies>

到此这篇关于详解SpringBoot同时可以处理多少请求的文章就介绍到这了,更多相关SpringBoot同时处理请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 详解Spring中@Component和@Configuration的区别

    详解Spring中@Component和@Configuration的区别

    一直有同学搞不清Spring中@Component和@Configuration这两个注解有什么区别,所以这篇文章小编就给大家简单介绍一下@Component和@Configuration的区别,需要的朋友可以参考下
    2023-07-07
  • 6种SpringBoot解决跨域请求的方法整理

    6种SpringBoot解决跨域请求的方法整理

    跨域资源共享是一种标准机制,允许服务器声明哪些源可以访问其资源,在SpringBoot应用中,有多种方式可以解决跨域问题,本文主要介绍了6种常见的解决方案,大家可以根据需求自行选择
    2025-04-04
  • Java JConsole远程连接配置案例详解

    Java JConsole远程连接配置案例详解

    这篇文章主要介绍了Java JConsole远程连接配置案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 一篇文章带你深入了解Java异常

    一篇文章带你深入了解Java异常

    本篇文章主要介绍了java异常处理机制及应用,异常处理机制是Java语言的一大特色。从异常处理的机制、异常处理的方法、异常处理的原则等方面介绍Java语言的异常处理技术,有兴趣的可以了解一下
    2021-08-08
  • java中@ConfigurationProperties失效的问题解决

    java中@ConfigurationProperties失效的问题解决

    在Java开发中,使用@ConfigurationProperties注解读取配置文件时,如果配置类中的属性设置为static,将无法正确读取配置值,本文就来介绍一下具体解决方法,感兴趣的可以了解一下
    2024-09-09
  • Java 泛型有哪些好处详解

    Java 泛型有哪些好处详解

    这篇文章主要介绍了 Java 泛型有哪些好处详解的相关资料,需要的朋友可以参考下
    2017-02-02
  • 面试常问之如何理解Spring当中的Bean

    面试常问之如何理解Spring当中的Bean

    在Spring框架中Bean是被IOC 容器管理的对象,是 Spring应用的核心组成部分,所有由Spring容器创建、装配和管理的对象都称为Bean,这篇文章主要介绍了面试常问之如何理解Spring当中Bean的相关资料,需要的朋友可以参考下
    2026-05-05
  • 详解Spring工厂特性

    详解Spring工厂特性

    今天带大家学习Spring的特性-工厂特性,文中有非常详细的介绍及代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • Maven是什么?Maven的概念+作用+仓库的介绍+常用命令的详解

    Maven是什么?Maven的概念+作用+仓库的介绍+常用命令的详解

    Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑.,本文给大家介绍Maven的概念+作用+仓库的介绍+常用命令,感兴趣的的朋友跟随小编一起看看吧
    2020-09-09
  • 详解Java8新特性之interface中的static方法和default方法

    详解Java8新特性之interface中的static方法和default方法

    这篇文章主要介绍了Java8新特性之interface中的static方法和default方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08

最新评论