優化springboot

cxy1188發表於2020-12-16

優化springboot

介紹

在SpringBoot的Web專案中,預設採用的是內建Tomcat,當然也可以配置支援內建的jetty,內建有什麼好處呢? 
1. 方便微服務部署。 
2. 方便專案啟動,不需要下載Tomcat或者Jetty

針對目前的容器優化,目前來說沒有太多地方,需要考慮如下幾個點

  1. 執行緒數
  2. 超時時間
  3. jvm優化

針對上述的優化點來說,首先執行緒數是一個重點,初始執行緒數和最大執行緒數,初始執行緒數保障啟動的時候,如果有大量使用者訪問,能夠很穩定的接受請求, 
而最大執行緒數量用來保證系統的穩定性,而超時時間用來保障連線數不容易被壓垮,如果大批量的請求過來,延遲比較高,不容易把執行緒打滿。這種情況在生產中是比較常見的 
一旦網路不穩定,寧願丟包也不願意把機器壓垮。 
jvm優化一般來說沒有太多場景,無非就是加大初始的堆,和最大限制堆,當然也不是無限增大,根據的情況進快速開始

 

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

1

2

3

4

5

server:

  tomcat:

    min-spare-threads: 20

    max-threads: 100

  connection-timeout: 5000

 這塊對tomcat進行了一個優化配置,最大執行緒數是100,初始化執行緒是20,超時時間是5000ms

 Jvm優化

這塊主要不是談如何優化,jvm優化是一個需要場景化的,沒有什麼太多特定引數,一般來說在server端執行都會指定如下引數 
初始記憶體和最大記憶體基本會設定成一樣的,具體大小根據場景設定,-server是一個必須要用的引數, 
至於收集器這些使用預設的就可以了,除非有特定需求。

1.使用-server模式

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

java -server -jar springboot-1.0.jar

2.指定堆引數

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

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

1

java -server -Xms512m -Xmx768m  -jar springboot-1.0.jar

 設定初始化堆記憶體為512MB,最大為768MB。

3.遠端Debug

在伺服器上將啟動引數修改為:

java -Djavax.net.debug=ssl -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 -jar springboot-1.0.jar

 

這個時候服務端遠端Debug模式開啟,埠號為8888。

在IDEA中,點選Edit Configuration按鈕。

出現彈窗,點選+按鈕,找到Remote選項。

 

在【1】中填入Remote專案名稱,在【2】中填IP地址和埠號,在【3】選擇遠端除錯的專案module,配置完成後點選OK即可

如果碰到連線超時的情況,很有可能伺服器的防火牆的問題,舉例CentOs7,關閉防火牆

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動

 

點選debug按鈕,IDEA控制檯列印資訊:

說明遠端除錯成功。

 

JVM工具遠端連線

jconsole與Jvisualvm遠端連線

通常我們的web服務都輸部署在伺服器上的,在window使用jconsole是很方便的,相對於Linux就有一些麻煩了,需要進行一些設定。

1.檢視hostname,首先使用

hostname -i

 

 檢視,伺服器的hostname為127.0.0.1,這個是不對的,需要進行修改

2.修改hostname

修改/etc/hosts檔案,將其第一行的“127.0.0.1  localhost.localdomain localhost”,修改為:“192.168.44.128  localhost.localdomain localhost”.“192.168.44.128”為實際的伺服器的IP地

3.重啟Linux,在伺服器上輸入hostname -i,檢視實際設定的IP地址是否為你設定的

4.啟動服務,引數為:

java -jar -Djava.rmi.server.hostname=192.168.44.128 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=911 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false jantent-1.0-SNAPSHOT.jar

 

ip為192.168.44.128,埠為911 。

5.開啟Jconsole,進行遠端連線,輸入IP和埠即可

點選連線,經過稍稍等待之後,即可完成連線,如下圖所示:

 

 同理,JvisualVm的遠端連線是同樣的,啟動引數也是一樣.

然後在本機JvisualVm輸入IP:PORT,即可進行遠端連線:如下圖所示:

相比較Jvisualvm功能更加強大一下,介面也更美觀

 

 

註明:現已入住騰訊雲自媒體分享計劃

 

相關文章