自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

京東面試:SpringBoot同時(shí)可以處理多少請求?

開發(fā) 前端
Spring Boot 同時(shí)可以處理多少個(gè)請求,并不取決于 Spring Boot 框架本身,而是取決于其內(nèi)置的 Web 容器(因?yàn)?Web 容器的行為,決定了 Spring Boot 的行為,所以咱們姑且認(rèn)為兩個(gè)問題的回答是一樣的)。

Spring Boot 作為 Java 開發(fā)中必備的框架,它為開發(fā)者提供了高效且易用的開發(fā)工具,所以和它相關(guān)的面試題自然也很重要,咱們今天就來看這道經(jīng)典的面試題:Spring Boot 同時(shí)可以處理多少個(gè)請求 ?

準(zhǔn)確的來說,Spring Boot 同時(shí)可以處理多少個(gè)請求,并不取決于 Spring Boot 框架本身,而是取決于其內(nèi)置的 Web 容器(因?yàn)?Web 容器的行為,決定了 Spring Boot 的行為,所以咱們姑且認(rèn)為兩個(gè)問題的回答是一樣的)。

1.Web三大容器

Web 容器目前也是三分天下,市面上最常見的三種 Web 容器分別是:Tomcat、Undertow 和 Jetty,其中 Tomcat 為 Spring Boot 框架默認(rèn)的 Web 容器。

它們?nèi)叩膮^(qū)別如下:

  • Tomcat 是 Apache 軟件基金會下的開源項(xiàng)目,是最廣泛使用的 Servlet 容器之一,完全實(shí)現(xiàn)了 Java Servlet 和 JavaServer Pages(JSP)規(guī)范。它不僅是一個(gè) Servlet 容器,也是一個(gè)輕量級的應(yīng)用服務(wù)器,盡管相比其他輕量級服務(wù)器,Tomcat 被認(rèn)為是稍微重一些的。Tomcat 支持眾多的企業(yè)級特性,如 SSL、連接池等,適合運(yùn)行大型的、復(fù)雜的企業(yè)級應(yīng)用。它的穩(wěn)定性和成熟度經(jīng)過了多年的企業(yè)級應(yīng)用驗(yàn)證,因此在很多企業(yè)中作為首選的 Web 容器。
  • Undertow 是 Red Hat(紅帽公司)開發(fā)的一個(gè)靈活的、高性能的 Web 服務(wù)器和反向代理服務(wù)器,它是 WildFly 應(yīng)用服務(wù)器的默認(rèn) Web 容器。Undertow 設(shè)計(jì)上注重低內(nèi)存占用和高并發(fā)處理能力,尤其擅長處理大量的短連接場景,比如 RESTful API 服務(wù)。Undertow 支持 Servlet 3.1、WebSocket以及非阻塞 IO(NIO),并且是支持 HTTP/2 協(xié)議的現(xiàn)代服務(wù)器之一。它的設(shè)計(jì)理念在于提供一個(gè)模塊化、可嵌入式的解決方案,易于集成到現(xiàn)有的系統(tǒng)中,同時(shí)也適合微服務(wù)架構(gòu)。
  • Jetty 是一個(gè)開源的、輕量級的 Web 服務(wù)器和 Servlet 容器,由 Eclipse 基金會維護(hù)。它以其可嵌入式、高度可配置性著稱,常用于需要快速啟動和輕量級部署的場景,比如開發(fā)階段、測試環(huán)境或輕量級應(yīng)用。Jetty 也支持 Servlet 規(guī)范和 WebSocket,且同樣基于 NIO,使得它在處理大量并發(fā)連接時(shí)表現(xiàn)出色。Jetty 設(shè)計(jì)上強(qiáng)調(diào)靈活性和可擴(kuò)展性,易于通過 API 定制以滿足特定需求,因此在云環(huán)境、持續(xù)集成、DevOps 等領(lǐng)域很受歡迎。

總的來說,Tomcat 因其成熟穩(wěn)定和企業(yè)級特性適用于大型應(yīng)用;Undertow 以高性能和低內(nèi)存占用見長,特別適合處理高并發(fā)短連接場景;而 Jetty 則以輕量、靈活、易于嵌入為特點(diǎn),適合快速開發(fā)和輕量級部署。

2.最大連接數(shù)和最大等待數(shù)

以 Spring Boot 框架默認(rèn)的 Web 容器 Tomcat 為例,它能夠同時(shí)處理多少個(gè)請求,其實(shí)是在 Spring Boot 框架中的 spring-configuration-metadata.json 文件中配置著,如下圖所示:

打開此文件,搜索“server.tomcat.max-connections”(Tomcat 最大連接數(shù))會得到以下結(jié)果:

也就是說,默認(rèn)情況下 Tomcat 允許的最大連接數(shù)是 8192(=8*1024)個(gè)。

那么,此時(shí)有人可能會認(rèn)為,默認(rèn)情況下 Spring Boot 同時(shí)能處理的請求數(shù)應(yīng)該是 8192,如果你也是這樣認(rèn)為,那你就錯了。為什么呢?

因?yàn)?,雖然 Tomcat 可以允許最大的連接數(shù)是 8192,但是 Tomcat 還有一個(gè)最大等待數(shù),也就是說,如果達(dá)到了 8192 之后,還有一個(gè)等待隊(duì)列可以存放請求的連接,所以,Spring Boot 可以同時(shí)處理多少個(gè)連接,等于 Tomcat 的最大連接數(shù)加 Tomcat 的最大等待數(shù)。

那么,最大等待數(shù)是多少呢?

我們繼續(xù)在 spring-configuration-metadata.json 文件中,搜索“server.tomcat.accept-count”(Tomcat 最大等待數(shù)),搜索結(jié)果如下圖所示:

也就是說,默認(rèn)情況下,Tomcat 最大等待數(shù)為 100 個(gè)。

3.同時(shí)處理請求數(shù)

所以得出結(jié)論:默認(rèn)情況下 Spring Boot 能夠同時(shí)處理的請求數(shù)=最大連接數(shù)(8192)+最大等待數(shù)(100),結(jié)果為 8292 個(gè)。

當(dāng)然,這兩個(gè)值是可以在 Spring Boot 配置文件中修改的,如下配置所示:

server:
  tomcat:
    max-connections: 2000 # 最大連接數(shù)
    accept-count: 200 # 最大等待數(shù)

4.擴(kuò)展知識:設(shè)置Web容器

Spring Boot 框架如何設(shè)置 Web 容器為 Jetty 或 Undertow 呢?接下來,我們來看一下。

(1)設(shè)置容器為Jetty

要設(shè)置 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>

也就是說,只需要將默認(rèn)的 tomcat 排除掉,添加 jetty 的依賴即可。

(2)設(shè)置容器為Undertow

要設(shè)置 Spring Boot 框架的 Web 容器為 Undertow 的思路和上面 Jetty 的實(shí)現(xiàn)思路相同,只需要修改 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>
責(zé)任編輯:姜華 來源: Java中文社群
相關(guān)推薦

2023-10-04 19:43:38

2024-05-21 09:08:57

JVM調(diào)優(yōu)面試

2023-12-04 10:36:46

SessionCookie

2023-07-31 08:26:09

2023-08-26 19:23:40

Javastatic關(guān)鍵字

2024-11-07 12:31:29

2022-11-09 17:10:47

JVM內(nèi)存區(qū)域

2024-07-22 14:09:22

@AsyncJava

2021-02-21 10:54:20

京東MySQLIT

2025-02-24 12:00:00

開發(fā)SpringBootJava

2023-12-13 13:28:00

Spring全局異常處理架構(gòu)

2021-01-18 05:13:04

TomcatHttp

2024-08-06 09:51:21

SpringHTTPJSON

2023-01-04 08:14:48

binlog參數(shù)生效

2023-11-30 08:16:19

SpringjarTomcat

2014-01-10 14:20:29

京東云

2021-11-12 19:14:47

數(shù)字化

2021-06-17 09:32:39

重復(fù)請求并發(fā)請求Java

2013-10-16 14:30:03

2019-05-29 15:17:43

TCPHTTPSSL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號