Tomcat調優和虛擬主機的設置

Tomcat虛擬主機

什麼是虛擬主機?

虛擬主機就是把一臺真正的主機分成許多“虛擬”的主機,每一臺虛擬主機都具有獨立的域名和IP地址,具有完整的Internet服務器功能。
虛擬主機之間完全獨立,在外界看來,每一臺虛擬主機和一臺獨立的主機完全一樣。

配置文件位置:

/conf/server.xml #tomcat配置文件
tomcat的默認端口:8080

1.基於域名的虛擬主機

多個域名解析一個IP地址

 [work@localhost tomcat]$ vim conf/server.xml 添加如下內容

 <Host name="www.maiya.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context docBase='jspgou' path="" reloadable="true" crossContext="true"/>
</Host>

參數說明:

appBase: 指定站點根目錄位置(可以是相對路徑或絕對路徑)

unpackWAR :本項爲"true" 意味着 Tomcat 會保存 .war 包的解壓結果,然後直接對解壓結果進行運行。
考慮到jvm的類加載機制,每個類都僅加載一次,但是頁面內容卻沒有類似的有效緩存,所以 .war 還是解壓執行的比較好。

path: 指定訪問路徑URI(虛擬目錄名)

docBase :指定jsp項目的存放路徑(可以是相對路徑或絕對路徑)

debug :設定debug的等級0提供最少的信息,9提供最多的信息

reloadable :本項爲true時 當web.xml或者class有改動的時候都會自動重新加載不需要從新啓動服務(所謂的支持熱發佈功能)

crosscontext :本項爲"true" 表示配置的不同context共享一個session

cachingAllowed :本項爲"true"時 意味着開啓了 Tomcat 的靜態緩存功能。靜態文件包括 JavaScript 程序、圖片聲音等允許網絡訪問的文件以及 HTML 頁面。

cacheMaxSize :指定靜態緩存功能緩衝區大小的設定。單位是 MB ,也就是 1024KB 。例子中設爲 1024 ,意味着1GB 。

2.基於端口虛擬主機

一個IP地址,通過不同的端口實現不同網站的訪問

關鍵 : 在server.xml 中 設置兩個service組件,設置不同的端口(基於端口應用範圍很少)

<Service name="Catalinai1">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="www.maiya.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context docBase='jspgou' path="" reloadable="true" crossContext="true"/>
        </Host>
        <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      </Host>
    </Engine>
  </Service>

<Service name="Catalina2">
    <Connector port="8090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="www.maiya.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context docBase='jspgou' path="" reloadable="true" crossContext="true"/>
        </Host>
        <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      </Host>
    </Engine>
  </Service>

Tomcat Manager 管理頁面

添加允許訪問的主機

[work@localhost tomcat]$ vim webapps/manager/META-INF/context.xml

<Context antiResourceLocking="false" privileged="true" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
           allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10.18.*$" /> <Manager
sessionAttributeValueClassNameFilter="java\.lang\.
(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFil
ter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/> </Context>

添加允許訪問的用戶和角色

[work@localhost tomcat]$ vim conf/tomcat-users.xml

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="123" roles="admin-gui,manager-gui,manager-script"/>

Tomcat調優

JVM內存優化

vim bin/catalina.sh

CATALINA_OPTS="-server -Xms128m -Xmx512m"
# 或者
JAVA_OPTS="$JAVA_OPTS -Xms4096m -Xmx4096m -XX:PermSize=1024m -XX:MaxPermSize=2048m"

開啓GC日誌

JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/logs/gc-%t.log"

開啓JMX端口便於監控

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=10028
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=java69-matrix.zeus.lianjia.com"

取消JVM 的默認DNS緩存時間

不緩存DNS記錄,避免DNS解析更改後要重啓JVM虛擬機

CATALINA_OPTS="$CATALINA_OPTS -Dsun.net.inetaddr.ttl=0 -Dsun.net.inetaddr.negative.ttl=0

參數說明:

-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併發優化

Tomcat配置文件conf/server.xml中

minProcessors: 最小空閒連接線程數,用於提高系統處理性能,默認值爲 10

maxProcessors: 最大連接線程數,即:併發處理的最大請求數,默認值爲 75

acceptCount:   允許的最大連接數,應大於等於 maxProcessors ,默認值爲 100

enableLookups: 是否反查域名,取值爲: true 或 false 。爲了提高處理能力,應設置爲 false

connectionTimeout: 網絡連接超時,單位:毫秒。設置爲 0表示永不超時,這樣設置有隱患的。通常可設置爲30000毫秒。
其中和最大連接數相關的參數爲maxProcessors 和 acceptCount 。如果要加大併發連接數,應同時加大這兩個參數。

web server允許的最大連接數還受制於操作系統的內核參數設置,通常Windows是 2000個左右, Linux是1000個左右。

maxThreads:        客戶請求最大線程數

minSpareThreads:   Tomcat初始化時創建的 socket 線程數

maxSpareThreads:   Tomcat連接器的最大空閒 socket 線程數

enableLookups:     若設爲true, 則支持域名解析,可把 ip 地址解析爲主機名

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

acceptAccount:     監聽端口隊列最大數,滿了之後客戶請求會被拒絕(不能小於maxSpareThreads)

connectionTimeout: 連接超時

minProcessors:      服務器創建時的最小處理線程數

maxProcessors:     服務器同時最大處理線程數

URIEncoding:        URL統一編碼

Tomcat Connector運行模式優化

Tomcat Connector有三種運行模式:
bio:阻塞IO bio是三種運行模式中性能最低第一種。

nio:是一個基於緩衝區,並能提供非阻塞I/O操作的JAVA API 因此NIO也成爲非阻塞I/O,比bio擁有更好的併發性能。

apr:調用httpd核心鏈接庫來讀取或文件傳輸,從而提高tomat對靜態文件的處理性能。Tomcat APR模式也是Tomcat在高併發下的首選運行模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章