Spring Boot 作為 Java 開發(fā)中必備的框架,它為開發(fā)者提供了高效且易用的開發(fā)工具,所以和它相關(guān)的面試題自然也很重要,咱們今天就來看這道經(jīng)典的面試題:Spring Boot 同時可以處理多少個請求 ?
準確的來說,Spring Boot 同時可以處理多少個請求,并不取決于 Spring Boot 框架本身,而是取決于其內(nèi)置的 Web 容器(因為 Web 容器的行為,決定了 Spring Boot 的行為,所以咱們姑且認為兩個問題的回答是一樣的)。
Web 容器目前也是三分天下,市面上最常見的三種 Web 容器分別是:Tomcat、Undertow 和 Jetty,其中 Tomcat 為 Spring Boot 框架默認的 Web 容器。
它們?nèi)叩膮^(qū)別如下:
“
總的來說,Tomcat 因其成熟穩(wěn)定和企業(yè)級特性適用于大型應用;Undertow 以高性能和低內(nèi)存占用見長,特別適合處理高并發(fā)短連接場景;而 Jetty 則以輕量、靈活、易于嵌入為特點,適合快速開發(fā)和輕量級部署。
以 Spring Boot 框架默認的 Web 容器 Tomcat 為例,它能夠同時處理多少個請求,其實是在 Spring Boot 框架中的 spring-configuration-metadata.json 文件中配置著,如下圖所示:
打開此文件,搜索“server.tomcat.max-connections”(Tomcat 最大連接數(shù))會得到以下結(jié)果:
也就是說,默認情況下 Tomcat 允許的最大連接數(shù)是 8192(=8*1024)個。
那么,此時有人可能會認為,默認情況下 Spring Boot 同時能處理的請求數(shù)應該是 8192,如果你也是這樣認為,那你就錯了。為什么呢?
因為,雖然 Tomcat 可以允許最大的連接數(shù)是 8192,但是 Tomcat 還有一個最大等待數(shù),也就是說,如果達到了 8192 之后,還有一個等待隊列可以存放請求的連接,所以,Spring Boot 可以同時處理多少個連接,等于 Tomcat 的最大連接數(shù)加 Tomcat 的最大等待數(shù)。
那么,最大等待數(shù)是多少呢?
我們繼續(xù)在 spring-configuration-metadata.json 文件中,搜索“server.tomcat.accept-count”(Tomcat 最大等待數(shù)),搜索結(jié)果如下圖所示:
也就是說,默認情況下,Tomcat 最大等待數(shù)為 100 個。
所以得出結(jié)論:默認情況下 Spring Boot 能夠同時處理的請求數(shù)=最大連接數(shù)(8192)+最大等待數(shù)(100),結(jié)果為 8292 個。
當然,這兩個值是可以在 Spring Boot 配置文件中修改的,如下配置所示:
server: tomcat: max-connections: 2000 # 最大連接數(shù) accept-count: 200 # 最大等待數(shù)
Spring Boot 框架如何設(shè)置 Web 容器為 Jetty 或 Undertow 呢?接下來,我們來看一下。
要設(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>
也就是說,只需要將默認的 tomcat 排除掉,添加 jetty 的依賴即可。
要設(shè)置 Spring Boot 框架的 Web 容器為 Undertow 的思路和上面 Jetty 的實現(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>
本文鏈接:http://www.www897cc.com/showinfo-26-90661-0.html京東面試:SpringBoot同時可以處理多少請求?
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
下一篇: 敏捷的數(shù)據(jù)工程實踐