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