Springboot優(yōu)化內置服務器Tomcat優(yōu)化方式(underTow)
更新時間:2024年12月10日 15:33:48 作者:Java楊永杰
本文詳細介紹了Spring Boot中Tomcat和Undertow服務器的配置和優(yōu)化,包括初始線程數、最大線程數、最小備用線程數、最大請求數等參數的優(yōu)化建議,以及在高并發(fā)場景下Undertow相對于Tomcat的優(yōu)勢
前言
通過org.springframework.boot.autoconfigure.web.ServerProperties查看,其中包括屬性tomcat、jetty、undertow三種服務器的設置,默認啟用tomcat。
Tomcat 自身優(yōu)化
# Tomcat server: tomcat: uri-encoding: UTF-8 #最小線程數 min-spare-threads: 500 #最大線程數 max-threads: 2500 #最大鏈接數 max-connections: 6500 #最大等待隊列長度 accept-count: 1000 #請求頭最大長度kb max-http-header-size: 1048576 #請請求體最大長度kb #max-http-post-size: 2097152 #服務http端口 port: 8080 #鏈接建立超時時間 connection-timeout: 12000 servlet: #訪問根路徑 context-path: /son
比較重要的有兩個:初始線程數和最大線程數。
- 初始線程數:保障啟動的時候,如果有大量用戶訪問,能夠很穩(wěn)定的接受請求。
- 最大線程數:用來保證系統(tǒng)的穩(wěn)定性。
其它參數優(yōu)化:
min-spare-threads
:最小備用線程數,tomcat啟動時的初始化的線程數。max-threads
:Tomcat可創(chuàng)建的最大的線程數,每一個線程處理一個請求,超過這個請求數后,客戶端請求只能排隊,等有線程釋放才能處理。(建議這個配置數可以在服務器CUP核心數的200~250倍之間)accept-count
:當調用Web服務的HTTP請求數達到tomcat的最大線程數時,還有新的HTTP請求到來,這時tomcat會將該請求放在等待隊列中,這個acceptCount就是指能夠接受的最大等待數,默認100。如果等待隊列也被放滿了,這個時候再來新的請求就會被tomcat拒絕(connection refused)。max-connections
:這個參數是指在同一時間,tomcat能夠接受的最大連接數。一般這個值要大于(max-threads)+(accept-count)。connection-timeout
:最長等待時間,如果沒有數據進來,等待一段時間后斷開連接,釋放線程。
UnderTow優(yōu)化
為什么要變成UnderTow?
我們在相同機器配置下壓測Tomcat和Undertow,得到的測試結果如下所示:
- Tomcat:
- UnderTow:
內存使用對比:
結論:
Undertow在高并發(fā)業(yè)務場景中,性能優(yōu)于Tomcat
實現(xiàn)方式
POM文件移除tomcat換成underTow
<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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency>
配置相關參數:
# 是否打開 undertow 日志,默認為 false server.undertow.accesslog.enabled=false # 設置訪問日志所在目錄 server.undertow.accesslog.dir=logs # 指定工作者線程的 I/0 線程數,默認為 2 或者 CPU 的個數 server.undertow.io-threads= # 指定工作者線程個數,默認為 I/O 線程個數的 8 倍 server.undertow.worker-threads= # 設置 HTTP POST 內容的最大長度,默認不做限制 server.undertow.max-http-post-size=0
最后直接main 方法啟動Springboot即可。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
深入理解SpringBoot?最大連接數及最大并發(fā)數
SpringBoot能支持的最大并發(fā)量主要看其對Tomcat的設置,可以在配置文件中對其進行更改,本文就來介紹一下SpringBoot?最大連接數及最大并發(fā)數,感興趣的可以了解一下2023-08-08Java 異步線程監(jiān)聽與結果回調及異常捕獲總結分析
異常是程序之中導致程序中斷的一種指令流,異常一旦出現(xiàn)并且沒有進行合理處理的話,那么程序就將中斷執(zhí)行,這篇文章綜合介紹了異步線程監(jiān)聽與結果回調及異常捕獲2021-11-11