1. 程式人生 > 其它 >實戰Springboot內建Tomcat配置調優

實戰Springboot內建Tomcat配置調優

我們在使用springboot(版本:2.0.3.RELEASE)開發web專案時,大多數時候採用的是內建的Tomcat(當然也可以配置支援內建的jetty),內建Tomcat有什麼好處呢?

1、方便微服務部署,減少繁雜的配置

2、方便專案啟動,不需要單獨下載web容器,如Tomcat,jetty等。

#雲伺服器配置12核心,24G記憶體,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 &

針對目前的容器優化,可以從以下幾點考慮:

1、執行緒數2、超時時間3、JVM優化

首先,執行緒數是一個重點,每一次HTTP請求到達Web伺服器,Web伺服器都會建立一個執行緒來處理該請求,該引數決定了應用服務同時可以處理多少個HTTP請求。

比較重要的有兩個:初始執行緒數最大執行緒數

初始執行緒數:保障啟動的時候,如果有大量使用者訪問,能夠很穩定的接受請求。最大執行緒數:用來保證系統的穩定性。

超時時間:用來保障連線數不容易被壓垮。如果大批量的請求過來,延遲比較高,很容易把執行緒數用光,這時就需要提高超時時間。這種情況在生產中是比較常見的 ,一旦網路不穩定,寧願丟包也不能把伺服器壓垮

min-spare-threads:最小備用執行緒數,tomcat啟動時的初始化的執行緒數。

max-threads:Tomcat可建立的最大的執行緒數,每一個執行緒處理一個請求,超過這個請求數後,客戶端請求只能排隊,等有執行緒釋放才能處理。(建議這個配置數可以在伺服器CUP核心數的200~250倍之間)

accept-count:當呼叫Web服務的HTTP請求數達到tomcat的最大執行緒數時,還有新的HTTP請求到來,這時tomcat會將該請求放在等待佇列中,這個acceptCount就是指能夠接受的最大等待數,預設100。如果等待佇列也被放滿了,這個時候再來新的請求就會被tomcat拒絕(connection refused)。

max-connections:這個引數是指在同一時間,tomcat能夠接受的最大連線數。一般這個值要大於(max-threads)+(accept-count)。

connection-timeout:最長等待時間,如果沒有資料進來,等待一段時間後斷開連線,釋放執行緒。

在spring boot配置檔案中application.yml,新增以下配置:

這塊對tomcat進行了一個優化配置,最大執行緒數是2500,初始化執行緒是500,超時時間是12000ms;

# 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: /song

JVM優化一般來說沒有太多場景,無非就是加大初始的堆,和最大限制堆,當然也不能無限增大,要根據實際情況優化。

初始記憶體和最大記憶體基本會設定成一樣的,具體大小根據場景設定,-server是一個必須要用的引數,至於收集器這些使用預設的就可以了,除非有特定需求。

1.使用-server模式:設定JVM使用server模式。64位JDK預設啟動該模式。

2.指定堆引數:這個根據伺服器的記憶體大小,來設定堆引數。

-Xms :設定Java堆疊的初始化大小

-Xmx :設定最大的java堆大小

設定初始化堆記憶體為10240MB,最大為14336MB。