咱們在使用springboot(版本:2.0.3.RELEASE)開發web項目時,大多數時候採用的是內置的Tomcat(固然也能夠配置支持內置的jetty),內置Tomcat有什麼好處呢?java
一、方便微服務部署,減小繁雜的配置web
二、方便項目啓動,不須要單獨下載web容器,如Tomcat,jetty等。spring
#雲服務器配置12核心,24G內存,java啓動jar命令:tomcat
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 &
針對目前的容器優化,能夠從如下幾點考慮:springboot
一、線程數 二、超時時間 三、JVM優化服務器
首先,線程數是一個重點,每一次HTTP請求到達Web服務器,Web服務器都會建立一個線程來處理該請求,該參數決定了應用服務同時能夠處理多少個HTTP請求。網絡
比較重要的有兩個:初始線程數和最大線程數。app
初始線程數:保障啓動的時候,若是有大量用戶訪問,可以很穩定的接受請求。最大線程數:用來保證系統的穩定性。微服務
超時時間:用來保障鏈接數不容易被壓垮。若是大批量的請求過來,延遲比較高,很容易把線程數用光,這時就須要提升超時時間。這種狀況在生產中是比較常見的 ,一旦網絡不穩定,寧願丟包也不能把服務器壓垮。post
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。