更新時(shí)間:2021-09-30 09:45:44 來源:動力節(jié)點(diǎn) 瀏覽1380次
大家在使用Springboot開發(fā)web項(xiàng)目時(shí),有很多的時(shí)候采用的是內(nèi)置的Tomcat(當(dāng)然也可以配置支持內(nèi)置的jetty),內(nèi)置Tomcat有什么好處呢?
1.方便微服務(wù)部署,減少繁雜的配置
2.方便項(xiàng)目啟動,不需要單獨(dú)下載web容器,如Tomcat,jetty等。
#云服務(wù)器配置12核心,24G內(nèi)存,java啟動jar命令:
nohup $JAVA_HOME/bin/java -server -Xms10240m -Xmx14336m -Xmn9216m -XX:MetaspaceSize=400m -XX:MaxMetaspaceSize=5120m -XX:-OmitStackTraceInFastThrow -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:./song_gc.log -XX:ErrorFile=./song_error.log -jar $APP_HOME/$APP_MAINCLASS >> $LOG_FILE 2>&1 &
針對目前的容器優(yōu)化,可以從以下幾點(diǎn)考慮:
1.線程數(shù)
2.超時(shí)時(shí)間
3.JVM優(yōu)化
首先,線程數(shù)是一個(gè)重點(diǎn),每一次HTTP請求到達(dá)Web服務(wù)器,Web服務(wù)器都會創(chuàng)建一個(gè)線程來處理該請求,該參數(shù)決定了應(yīng)用服務(wù)同時(shí)可以處理多少個(gè)HTTP請求。
比較重要的有兩個(gè):初始線程數(shù)和最大線程數(shù)。
初始線程數(shù):保障啟動的時(shí)候,如果有大量用戶訪問,能夠很穩(wěn)定的接受請求。最大線程數(shù):用來保證系統(tǒng)的穩(wěn)定性。
超時(shí)時(shí)間:用來保障連接數(shù)不容易被壓垮。如果大批量的請求過來,延遲比較高,很容易把線程數(shù)用光,這時(shí)就需要提高超時(shí)時(shí)間。這種情況在生產(chǎn)中是比較常見的 ,一旦網(wǎng)絡(luò)不穩(wěn)定,寧愿丟包也不能把服務(wù)器壓垮。
min-spare-threads:最小備用線程數(shù),tomcat啟動時(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會將該請求放在等待隊(duì)列中,這個(gè)acceptCount就是指能夠接受的最大等待數(shù),默認(rèn)100。如果等待隊(duì)列也被放滿了,這個(gè)時(shí)候再來新的請求就會被tomcat拒絕(connection refused)。
max-connections:這個(gè)參數(shù)是指在同一時(shí)間,tomcat能夠接受的最大連接數(shù)。一般這個(gè)值要大于(max-threads)+(accept-count)。
connection-timeout:最長等待時(shí)間,如果沒有數(shù)據(jù)進(jìn)來,等待一段時(shí)間后斷開連接,釋放線程。
在spring boot配置文件中application.yml,添加以下配置:
這塊對tomcat進(jìn)行了一個(gè)優(yōu)化配置,最大線程數(shù)是2500,初始化線程是500,超時(shí)時(shí)間是12000ms;
# 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: /song
JVM優(yōu)化一般來說沒有太多場景,無非就是加大初始的堆,和最大限制堆,當(dāng)然也不能無限增大,要根據(jù)實(shí)際情況優(yōu)化。
初始內(nèi)存和最大內(nèi)存基本會設(shè)置成一樣的,具體大小根據(jù)場景設(shè)置,-server是一個(gè)必須要用的參數(shù),至于收集器這些使用默認(rèn)的就可以了,除非有特定需求。
1.使用-server模式:設(shè)置JVM使用server模式。64位JDK默認(rèn)啟動該模式。
2.指定堆參數(shù):這個(gè)根據(jù)服務(wù)器的內(nèi)存大小,來設(shè)置堆參數(shù)。
-Xms :設(shè)置Java堆棧的初始化大小
-Xmx :設(shè)置最大的java堆大小
設(shè)置初始化堆內(nèi)存為10240MB,最大為14336MB。
以上就是“實(shí)戰(zhàn)SpringBoot內(nèi)置Tomcat配置調(diào)優(yōu)”的介紹,大家若想了解更相關(guān)知識,可以關(guān)注動力節(jié)點(diǎn)的SpringBoot教程,希望對大家能夠有所幫助。
初級 202925
初級 203221
初級 202629
初級 203743