着重是jvm的內存大小的配置和catalina的線程數及隊列等等。javascript
JVM的優化
css
Linux 修改 啓動文件的參數 JAVA_OPTS html
若是服務器只運行一個 Tomcatjava
8G內存的機子配置:apache
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"vim
16Gtomcat
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 六、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"
/>