Tomcat性能調(diào)優(yōu)(windows)

1、目錄:
a、基礎(chǔ)調(diào)優(yōu)
b、JVM 優(yōu)化
c、高級調(diào)優(yōu)
2、基礎(chǔ)調(diào)優(yōu):
2.1、tomcat的各版本的優(yōu)化參數(shù)有點(diǎn)不一樣,可以啟動tomcat之后訪問[http://127.0.0.1:8080/docs/config]查看說明
2.2、配置tomcat管理員賬戶(查看 Tomcat 的運(yùn)行狀態(tài)),編輯 /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"/>
配置好之后登錄http://127.0.0.1:8080/進(jìn)入到主界面:
tomcat管理界面.png

如圖所示有標(biāo)記的三個按鈕,點(diǎn)擊登錄之后,分別進(jìn)入到服務(wù)狀態(tài)查看界面,Tomcat Web應(yīng)用管理界面,主機(jī)管理界面。我們接下來會提到前兩個的部分功能,第三個就是配置虛擬機(jī),跟直接在server.xml配置效果一樣
2.3、配置
先登錄上面配置的管理員賬號進(jìn)入Server Status界面

服務(wù)狀態(tài)管理界面.png

界面可以看到 "ajp-nio-8009"和"http-nio-8081",由于我是用的最新的tomcat9做的演示,所以我們看到的IO類型直接就是非阻塞的同步IO(nio),Tomcat6/7/8默認(rèn)的都是阻塞式的同步IO(bio),因?yàn)閚io效果要遠(yuǎn)大于bio,所以我們要改為nio,之所以之前默認(rèn)為bio,知識為了兼容jdk1.4以下版本。
2.3.1修改bio為nio,只需要修改/conf/server.xml中的

<Connector 
  port="8080" 
  protocol="HTTP/1.1" 
  connectionTimeout="20000" 
  redirectPort="8443" 
/>

變?yōu)?/p>

<Connector 
  port="8080" 
  protocol="org.apache.coyote.http11.Http11NioProtocol" 
<!-- 或者protocol="org.apache.coyote.http11.Http11Nio2Protocol" -->
<!--或者protocol="org.apache.coyote.http11.Http11AprProtocol"-->
  connectionTimeout="20000" 
  redirectPort="8443" 
/>

注意:Tomcat 8 設(shè)置 nio2 更好:(如果這個用不了,就用nio)Tomcat 6、7 設(shè)置 nio 更好,nio2也就是非阻塞的異步IO,性能比nio更好一點(diǎn),APR(ApachePortable Runtime/Apache可移植運(yùn)行時),是ApacheHTTP服務(wù)器的支持庫。你可以簡單地理解為:Tomcat將以JNI的形式調(diào)用Apache HTTP服務(wù)器的核心動態(tài)鏈接庫來處理文件讀取或網(wǎng)絡(luò)傳輸操作,從而大大地提高Tomcat對靜態(tài)文件的處理性能。
2.3.2 enableLookups,禁用DNS查詢
2.3.3 acceptorThreadCount,用于接收連接的線程的數(shù)量,默認(rèn)值是1。一般這個指需要改動的時候是因?yàn)樵摲?wù)器是一個多核CPU,如果是多核 CPU 一般配置為 2
2.3.4 acceptCount,指定當(dāng)所有可以使用的處理請求的線程數(shù)都被使用時,可以放到處理隊(duì)列中的請求數(shù),超過這個數(shù)的請求將不予處理,默認(rèn)設(shè)置 100

<Connector 
  port="8080" 
  protocol="org.apache.coyote.http11.Http11NioProtocol" 
  enableLookups="false"
  acceptCount="100"
  acceptorThreadCount="2" 
  connectionTimeout="20000" 
  redirectPort="8443" 
/>
  2.3.5 Tomcat緩存優(yōu)化

compression打開壓縮功能

compressionMinSize啟用壓縮的輸出內(nèi)容大小,這里面默認(rèn)為2KB

compressableMimeType壓縮類型

connectionTimeout定義建立客戶連接超時的時間.如果為-1,表示不限制建立客戶連接的時間

compression="on"

compressionMinSize="2048"

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

connectionTimeout="20000"
  2.3.6配置最大線程數(shù)量(默認(rèn)200)

maxThreads:由該連接器創(chuàng)建的處理請求線程的最大數(shù)目,也就是可以處理的同時請求的最大數(shù)目。如果未配置默認(rèn)值為200。如果一個執(zhí)行器與此連接器關(guān)聯(lián),則忽略此屬性,因?yàn)樵搶傩詫⒈缓雎裕栽撨B接器將使用執(zhí)行器而不是一個內(nèi)部線程池來執(zhí)行任務(wù)。maxThreads是一個重要的配置屬性,maxThreads配置的合理直接影響了Tomcat的相關(guān)性能,所以這里我們重點(diǎn)討論下。
maxThreads并不是配置的越大越好,事實(shí)上你即使配置成999999也是沒有用的,因?yàn)檫@個最大值是受操作系統(tǒng)及相關(guān)硬件所制約的,并且最大值并不一定是最優(yōu)值,所以我們追尋的應(yīng)該是最優(yōu)值而不是最大值。

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

AJP是為了配合Apache處理靜態(tài)文件服務(wù)器,進(jìn)行服務(wù)器間文件傳輸?shù)膮f(xié)議,用不上的話就注銷它,后面我會講述Tomcat配合Nginx處理靜態(tài)文件(動靜分離和負(fù)載均衡)
把下面這一行注釋掉,默認(rèn) Tomcat 是開啟的。

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

禁用之后我們可以看一下服務(wù)狀態(tài)頁面:

圖三.png

發(fā)現(xiàn)AJP協(xié)議已經(jīng)沒有了,nio轉(zhuǎn)換為nio2了
2.3.8整合:

protocol="HTTP/1.1"

maxHttpHeaderSize="8192"

maxThreads="1000" //最大線程數(shù),默認(rèn)200

minSpareThreads="100" //Tomcat初始化時創(chuàng)建的socket線程數(shù),線程的最小運(yùn)行數(shù)目,這些始終保持運(yùn)行,如果未指定,默認(rèn)值為10

maxSpareThreads="1000"http://Tomcat連接器的最大空閑socket線程數(shù)

minProcessors="100"http://服務(wù)器創(chuàng)建時的最小處理線程數(shù)

maxProcessors="1000"http://服務(wù)器同時最大處理線程數(shù)

enableLookups="false"http://關(guān)閉DNS反向查詢,若設(shè)為true,則支持域名解析,可把ip地址解析為主機(jī)名

compression="on"http://打開壓縮功能

compressionMinSize="2048"

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

connectionTimeout="20000"http://代表連接超時時間,單位為毫秒,默認(rèn)值為60000。通常情況下設(shè)置為30000

URIEncoding="utf-8"http://URL統(tǒng)一編碼

acceptCount="1000"http://監(jiān)聽端口隊(duì)列最大數(shù),滿了之后客戶請求會被拒絕(不能小于maxSpareThreads),如果未指定,默認(rèn)值為100

redirectPort="8443"http://在需要基于安全通道的場合,把客戶請求轉(zhuǎn)發(fā)到基于SSL的redirectPort端口

disableUploadTimeout="true"/>//這個標(biāo)志允許servlet[Container](http://lib.csdn.net/base/4)在一個servlet執(zhí)行的時候,使用一個不同的,更長的連接超時。最終的結(jié)果是給servlet更長的時間以便完成其執(zhí)行,或者在數(shù)據(jù)上載的時候更長的超時時間。如果沒有指定,設(shè)為false
    2.3.9 Web應(yīng)用管理

用管理員賬號進(jìn)入web應(yīng)用管理界面:

web應(yīng)用管理界面.png

如圖所示,我們可以看到Applications模塊,在這個里面可以對tomcat中部署的應(yīng)用的啟動狀態(tài)做修改,把不需要的應(yīng)用可以暫時關(guān)閉,同時也可以對session緩存時間進(jìn)行配置
3、JVM 優(yōu)化
修改/bin/catalina.bat 文件,如:

jvm優(yōu)化參數(shù).png

如果服務(wù)器只運(yùn)行一個 Tomcat
機(jī)子內(nèi)存如果是 8G,一般 PermSize 配置是主要保證系統(tǒng)能穩(wěn)定起來就行(如果是Linux系統(tǒng),等號后的值要用引號引起來)

set 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
機(jī)子內(nèi)存如果是 16G,一般 PermSize 配置是主要保證系統(tǒng)能穩(wěn)定起來就行:
set 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
機(jī)子內(nèi)存如果是 32G,一般 PermSize 配置是主要保證系統(tǒng)能穩(wěn)定起來就行:
set 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
如果是開發(fā)機(jī)
set JAVA_OPTS=-Xms550m -Xmx1250m -XX:PermSize=550m -XX:MaxPermSize=1250m

參數(shù)說明:

-Dfile.encoding:默認(rèn)文件編碼
-server:表示這是應(yīng)用于服務(wù)器的配置,JVM 內(nèi)部會有特殊處理的
-Xmx1024m:設(shè)置JVM最大可用內(nèi)存為1024MB
-Xms1024m:設(shè)置JVM最小內(nèi)存為1024m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。
-XX:NewSize:設(shè)置年輕代大小
-XX:MaxNewSize:設(shè)置最大的年輕代大小
-XX:PermSize:設(shè)置永久代大小
-XX:MaxPermSize:設(shè)置最大永久代大小
-XX:NewRatio=4:設(shè)置年輕代(包括 Eden 和兩個 Survivor 區(qū))與終身代的比值(除去永久代)。設(shè)置為 4,則年輕代與終身代所占比值為 1:4,年輕代占整個堆棧的 1/5
-XX:MaxTenuringThreshold=10:設(shè)置垃圾最大年齡,默認(rèn)為:15。如果設(shè)置為 0 的話,則年輕代對象不經(jīng)過 Survivor 區(qū),直接進(jìn)入年老代。對于年老代比較多的應(yīng)用,可以提高效率。如果將此值設(shè)置為一個較大值,則年輕代對象會在 Survivor 區(qū)進(jìn)行多次復(fù)制,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概論。
-XX:+DisableExplicitGC:這個將會忽略手動調(diào)用 GC 的代碼使得 System.gc() 的調(diào)用就會變成一個空調(diào)用,完全不會觸發(fā)任何 GC

4、高級調(diào)優(yōu)
以上內(nèi)容足以應(yīng)付絕大多數(shù)情景,熟悉以上內(nèi)容,你也就步入了服務(wù)器優(yōu)化的大門了,且水平會遠(yuǎn)強(qiáng)于其他菜鳥,但要進(jìn)一步提升,則需繼續(xù)學(xué)習(xí)以下內(nèi)容
4.1、Tomcat配合Nginx做負(fù)載均衡
4.2、Tomcat配合Nginx做動靜分離
4.3、Tomcat配合Nginx和Redis做tomcat集群和session共享
4.4、Jmeter做壓力測試
如需交流學(xué)習(xí),請留言看我私文:

2017-07-05_154855.png

如有問題或有想相互學(xué)習(xí)交流的,可以聯(lián)系本人(郵箱:18986837482@163.com,微信:18986837482,QQ:785553790)
文檔參考:http://www.lxweimin.com/p/c8613d17e5fe

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,886評論 18 139
  • Tomcat 的缺省配置是不能穩(wěn)定長期運(yùn)行的,也就是不適合生產(chǎn)環(huán)境,它會死機(jī),讓你不斷重新啟動,甚至在午夜時分喚醒...
    java面試收割機(jī)閱讀 1,210評論 0 8
  • Tomcat可以從內(nèi)存、并發(fā)、緩存等方面進(jìn)行優(yōu)化 1、Tomcat內(nèi)存優(yōu)化: 在tomcat的啟動腳本catali...
    心云間丶聆聽閱讀 1,669評論 0 7
  • 概述 Tomcat是一個JSP/Servlet容器。其作為Servlet容器,有三種工作模式:獨(dú)立的Servlet...
    jiangmo閱讀 2,256評論 0 13
  • 01【先講個小故事】 三年前,家里面的人翻出了一本破舊的本子,上面記下了家里面發(fā)生的一些重大事件的時間,也是這本不...
    輕言卿語閱讀 275評論 0 2