SpringBoot專案配置Tomcat和JVM引數
設定Tomcat埠號和連線數等
使用application.properties配置檔案有一些引數無法設定,所以推薦建立一個類檔案來配置,如下:
package com.qipai.springbean;
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.context.embedded.EmbeddedServletContainer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.stereotype.Component;
/**
* Created by weiqingming on 2017/12/7.
*/
@Component
public class TomcatConfig extends TomcatEmbeddedServletContainerFactory
{
public EmbeddedServletContainer getEmbeddedServletContainer(ServletContextInitializer... initializers)
{
//設定埠
this.setPort(8081);
return super.getEmbeddedServletContainer(initializers);
}
protected void customizeConnector(Connector connector)
{
super.customizeConnector(connector);
Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler();
//設定最大連線數
protocol.setMaxConnections(200);
//設定最大執行緒數
protocol.setMaxThreads(300);
//連線超時時間
protocol.setConnectionTimeout(10000);
}
}
也可以使用application.properties配置檔案來配置,如下,但是沒有連線超時時間的配置。
#埠號
server.port=8081
#最大連線數
server.tomcat.max-connections=200
#最大執行緒數
server.tomcat.max-threads=300
#編碼方式
server.tomcat.uri-encoding=UTF-8
#post提交資料最大大小,設定為0不限制
server.tomcat.max-http-post-size=0
執行時設定JVM引數
先使用Maven打包成jar檔案
cd /專案路徑 mvn clean package
使用預設JVM配置執行
#前臺執行,關閉視窗後退出
java -jar /jar包路徑
#後臺執行
nohup java -jar /jar包路徑
#後臺執行,指定啟動日誌記錄檔案
nohub java -jar /jar包路徑 > /指定日誌檔案路徑
配置JVM引數執行
#前臺執行 java -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -jar /jar包路徑 nohup java -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -jar /jar包路徑
引數說明:
-XX:MetaspaceSize=128m (元空間預設大小)
-XX:MaxMetaspaceSize=128m (元空間最大大小)
-Xms1024m (堆最大大小)
-Xmx1024m (堆預設大小)
-Xmn256m (新生代大小)
-Xss256k (棧最大深度大小)
-XX:SurvivorRatio=8 (新生代分割槽比例 8:2)
-XX:+UseConcMarkSweepGC (指定使用的垃圾收集器,這裡使用CMS收集器)
知識點:JDK8之後把-XX:PermSize 和 -XX:MaxPermGen移除了,取而代之的是
-XX:MetaspaceSize=128m (元空間預設大小)
-XX:MaxMetaspaceSize=128m (元空間最大大小)
JDK 8開始把類的元資料放到本地化的堆記憶體(native heap)中,這一塊區域就叫Metaspace,中文名叫元空間。
使用本地化的記憶體有什麼好處呢?最直接的表現就是java.lang.OutOfMemoryError: PermGen空間問題將不復存在,因為預設的類的元資料分配只受本地記憶體大小的限制,也就是說本地記憶體剩餘多少,理論上Metaspace就可以有多大(貌似容量還與作業系統的虛擬記憶體有關?這裡不太清楚),這解決了空間不足的問題。不過,讓Metaspace變得無限大顯然是不現實的,因此我們也要限制Metaspace的大小:使用-XX:MaxMetaspaceSize引數來指定Metaspace區域的大小。JVM預設在執行時根據需要動態地設定MaxMetaspaceSize的大小。