1. 程式人生 > >tomcat 8.5 優化

tomcat 8.5 優化

-a 可用 config $@ mx2 conf ott nco 限制

著重是jvm的內存大小的配置和catalina的線程數及隊列等等。

JVM的優化

Linux 修改 啟動文件的參數 JAVA_OPTS

如果服務器只運行一個 Tomcat

8G內存的機子配置:

JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms29696m -Xmx29696m -XX:NewSize=6144m -XX:MaxNewSize=9216m -XX:PermSize=1024m -XX:MaxPermSize=1024m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"

16G

JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms13312m -Xmx13312m -XX:NewSize=3072m -XX:MaxNewSize=4096m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"

32G

JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms6144m -Xmx6144m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"


參數說明:

-Dfile.encoding:默認文件編碼
-server:表示這是應用於服務器的配置,JVM 內部會有特殊處理的
-Xmx1024m:設置JVM最大可用內存為1024MB
-Xms1024m:設置JVM最小內存為1024m。此值可以設置與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配內存。
-XX:NewSize:設置年輕代大小
-XX:MaxNewSize:設置最大的年輕代大小
-XX:PermSize:設置永久代大小
-XX:MaxPermSize:設置最大永久代大小
-XX:NewRatio=4:設置年輕代(包括 Eden 和兩個 Survivor 區)與終身代的比值(除去永久代)。設置為 4,則年輕代與終身代所占比值為 1:4,年輕代占整個堆棧的 1/5

-XX:MaxTenuringThreshold=10:設置垃圾最大年齡,默認為:15。如果設置為 0 的話,則年輕代對象不經過 Survivor 區,直接進入年老代。對於年老代比較多的應用,可以提高效率。如果將此值設置為一個較大值,則年輕代對象會在 Survivor 區進行多次復制,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概論。
-XX:+DisableExplicitGC:這個將會忽略手動調用 GC 的代碼使得 System.gc() 的調用就會變成一個空調用,完全不會觸發任何 GC


Tomcat 8 配置

設置 Tomcat 相關變量:

JAVA_HOME=/path/to/jdk1.8.0_72

CATALINA_HOME=/path/to/tomcat8

CATALINA_PID=$CATALINA_HOME/catalina.pid

如果使用 shutdown.sh 還無法停止 tomcat,可以修改其配置:vim /usr/program/tomcat8/bin/shutdown.sh

把最尾巴這一行:exec "$PRGDIR"/"$EXECUTABLE" stop "$@"

改為:exec "$PRGDIR"/"$EXECUTABLE" stop 10 -force

Tomcat 8 優化

Tomcat 6/7/8 的優化參數有點不一樣,最好按下面的方式看一下官網這個文檔是否還保留著這個參數

啟動tomcat,訪問該地址,下面要講解的一些配置信息,在該文檔下都有說明的:

文檔:http://127.0.0.1:8080/docs/config

你也可以直接看網絡版本:

Tomcat 8 文檔:https://tomcat.apache.org/tomcat-8.0-doc/config/

如果你需要查看 Tomcat 的運行狀態可以配置tomcat管理員賬戶,然後登陸 Tomcat 後臺進行查看

編輯 /opt/tomcat7/bin/conf/tomcat-users.xml 文件,在裏面添加下面信息:

<role rolename="manager"/>

<role rolename="manager-gui"/>

<role rolename="admin"/>

<role rolename="admin-gui"/>

<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>

編輯配置文件:vim /usr/program/tomcat7/conf/server.xml

打開默認被註釋的連接池配置:

默認值:

<!--

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

maxThreads="150" minSpareThreads="4"/>

-->

修改為:

<Executor

name="tomcatThreadPool"

namePrefix="catalina-exec-"

maxThreads="500"

minSpareThreads="100"

prestartminSpareThreads = "true"

maxQueueSize = "100"

/>

重點參數解釋:

maxThreads,最大並發數,默認設置 200,一般建議在 500 ~ 800,根據硬件設施和業務來判斷

minSpareThreads,Tomcat 初始化時創建的線程數,默認設置 25

prestartminSpareThreads,在 Tomcat 初始化的時候就初始化 minSpareThreads 的參數值,如果不等於 true,minSpareThreads 的值就沒啥效果了

maxQueueSize,最大的等待隊列數,超過則拒絕請求

修改默認的鏈接參數配置:

默認值:

<Connector

port="8080"

protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

/>

修改為:

<Connector

executor="tomcatThreadPool"

port="8080"

protocol="org.apache.coyote.http11.Http11Nio2Protocol"

connectionTimeout="20000"

maxConnections="10000"

redirectPort="8443"

enableLookups="false"

acceptCount="100"

maxPostSize="10485760"

compression="on"

disableUploadTimeout="true"

compressionMinSize="2048"

acceptorThreadCount="2"

compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"

URIEncoding="utf-8"

/>

重點參數解釋:

protocol,Tomcat 8 設置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol(如果這個用不了,就用下面那個)

protocol,Tomcat 6、7 設置 nio 更好:org.apache.coyote.http11.Http11NioProtocol

enableLookups,禁用DNS查詢

acceptCount,指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,默認設置 100

maxPostSize,以 FORM URL 參數方式的 POST 提交方式,限制提交最大的大小,默認是 2097152(2兆),它使用的單位是字節。10485760 為 10M。如果要禁用限制,則可以設置為 -1。

acceptorThreadCount,用於接收連接的線程的數量,默認值是1。一般這個指需要改動的時候是因為該服務器是一個多核CPU,如果是多核 CPU 一般配置為 2.

禁用 AJP(如果你服務器沒有使用 Apache)

把下面這一行註釋掉,默認 Tomcat 是開啟的。

<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->



目前優化的tomcat配置如下:

<Connector port="8090" protocol="HTTP/1.1"

connectionTimeout="2000000"

redirectPort="8443"

maxThreads="8000"

maxPostSize="10485760"

disableUploadTimeout="true"

minSpareThread="1000" maxSpareThreads="2000"

acceptCount="2000"

maxConnections="-1"

/>






tomcat 8.5 優化