Tomcat性能調優(windows)

1、目錄:
a、基礎調優
b、JVM 優化
c、高級調優
2、基礎調優:
2.1、tomcat的各版本的優化參數有點不一樣,可以啓動tomcat之後訪問[http://127.0.0.1:8080/docs/config]查看說明
2.2、配置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"/>

 

配置好之後登錄http://127.0.0.1:8080/進入到主界面:

tomcat管理界面.png

 

如圖所示有標記的三個按鈕,點擊登錄之後,分別進入到服務狀態查看界面,Tomcat Web應用管理界面,主機管理界面。我們接下來會提到前兩個的部分功能,第三個就是配置虛擬機,跟直接在server.xml配置效果一樣
2.3、配置
先登錄上面配置的管理員賬號進入Server Status界面

服務狀態管理界面.png

 

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

 

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

變爲

 

<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 設置 nio2 更好:(如果這個用不了,就用nio)Tomcat 6、7 設置 nio 更好,nio2也就是非阻塞的異步IO,性能比nio更好一點,APR(ApachePortable Runtime/Apache可移植運行時),是ApacheHTTP服務器的支持庫。你可以簡單地理解爲:Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態鏈接庫來處理文件讀取或網絡傳輸操作,從而大大地提高Tomcat對靜態文件的處理性能。
2.3.2 enableLookups,禁用DNS查詢
2.3.3 acceptorThreadCount,用於接收連接的線程的數量,默認值是1。一般這個指需要改動的時候是因爲該服務器是一個多核CPU,如果是多核 CPU 一般配置爲 2
2.3.4 acceptCount,指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,默認設置 100

 

<Connector 
  port="8080" 
  protocol="org.apache.coyote.http11.Http11NioProtocol" 
  enableLookups="false"
  acceptCount="100"
  acceptorThreadCount="2" 
  connectionTimeout="20000" 
  redirectPort="8443" 
/>

 

  2.3.5 Tomcat緩存優化

compression打開壓縮功能

compressionMinSize啓用壓縮的輸出內容大小,這裏面默認爲2KB

compressableMimeType壓縮類型

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

 

compression="on"

compressionMinSize="2048"

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

connectionTimeout="20000"

 

  2.3.6配置最大線程數量(默認200)

maxThreads:由該連接器創建的處理請求線程的最大數目,也就是可以處理的同時請求的最大數目。如果未配置默認值爲200。如果一個執行器與此連接器關聯,則忽略此屬性,因爲該屬性將被忽略,所以該連接器將使用執行器而不是一個內部線程池來執行任務。maxThreads是一個重要的配置屬性,maxThreads配置的合理直接影響了Tomcat的相關性能,所以這裏我們重點討論下。
maxThreads並不是配置的越大越好,事實上你即使配置成999999也是沒有用的,因爲這個最大值是受操作系統及相關硬件所制約的,並且最大值並不一定是最優值,所以我們追尋的應該是最優值而不是最大值。

 

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

AJP是爲了配合Apache處理靜態文件服務器,進行服務器間文件傳輸的協議,用不上的話就註銷它,後面我會講述Tomcat配合Nginx處理靜態文件(動靜分離和負載均衡)
把下面這一行註釋掉,默認 Tomcat 是開啓的。

 

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

禁用之後我們可以看一下服務狀態頁面:

圖三.png

 

發現AJP協議已經沒有了,nio轉換爲nio2了
2.3.8整合:

 

protocol="HTTP/1.1"

maxHttpHeaderSize="8192"

maxThreads="1000" //最大線程數,默認200

minSpareThreads="100" //Tomcat初始化時創建的socket線程數,線程的最小運行數目,這些始終保持運行,如果未指定,默認值爲10

maxSpareThreads="1000"//Tomcat連接器的最大空閒socket線程數

minProcessors="100"//服務器創建時的最小處理線程數

maxProcessors="1000"//服務器同時最大處理線程數

enableLookups="false"//關閉DNS反向查詢,若設爲true,則支持域名解析,可把ip地址解析爲主機名

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

compressionMinSize="2048"

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

connectionTimeout="20000"//代表連接超時時間,單位爲毫秒,默認值爲60000。通常情況下設置爲30000

URIEncoding="utf-8"//URL統一編碼

acceptCount="1000"//監聽端口隊列最大數,滿了之後客戶請求會被拒絕(不能小於maxSpareThreads),如果未指定,默認值爲100

redirectPort="8443"//在需要基於安全通道的場合,把客戶請求轉發到基於SSL的redirectPort端口

disableUploadTimeout="true"/>//這個標誌允許servlet[Container](http://lib.csdn.net/base/4)在一個servlet執行的時候,使用一個不同的,更長的連接超時。最終的結果是給servlet更長的時間以便完成其執行,或者在數據上載的時候更長的超時時間。如果沒有指定,設爲false

 

    2.3.9 Web應用管理

用管理員賬號進入web應用管理界面:

web應用管理界面.png

如圖所示,我們可以看到Applications模塊,在這個裏面可以對tomcat中部署的應用的啓動狀態做修改,把不需要的應用可以暫時關閉,同時也可以對session緩存時間進行配置
3、JVM 優化
修改/bin/catalina.bat 文件,如:

jvm優化參數.png

如果服務器只運行一個 Tomcat
機子內存如果是 8G,一般 PermSize 配置是主要保證系統能穩定起來就行(如果是Linux系統,等號後的值要用引號引起來)

 

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

 

機子內存如果是 16G,一般 PermSize 配置是主要保證系統能穩定起來就行:

 

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

 

機子內存如果是 32G,一般 PermSize 配置是主要保證系統能穩定起來就行:

 

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

 

如果是開發機

 

set JAVA_OPTS=-Xms550m -Xmx1250m -XX:PermSize=550m -XX:MaxPermSize=1250m

參數說明:

 

-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

4、高級調優
以上內容足以應付絕大多數情景,熟悉以上內容,你也就步入了服務器優化的大門了,且水平會遠強於其他菜鳥,但要進一步提升,則需繼續學習以下內容
4.1、Tomcat配合Nginx做負載均衡
4.2、Tomcat配合Nginx做動靜分離
4.3、Tomcat配合Nginx和Redis做tomcat集羣和session共享
4.4、Jmeter做壓力測試
如需交流學習,請留言看我私文:

 

 
鏈接:https://www.jianshu.com/p/4024bddc0550
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章