tomcat 8.5 優化

着重是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"

    />

相關文章
相關標籤/搜索