tomcat 8.5 優化
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:+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 優化