1. 程式人生 > 其它 >SpringBoot專案配置Tomcat和JVM引數

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的大小。