Tomcat配置詳解以及優化方案

server.xml

<Server>元素:

是整個配置文件的根元素,對應Tomcat服務器。

port:用來指定監聽關閉Tomcat服務器請求的端口。

shutdown:指定向port表示的端口發送關閉Tomcat服務器的命令。

<Service>元素:

監聽來自客戶端的http請求,一個Server節點可以有多個Service節點。

name:service的名字。

<Connector>元素:

連接器,負責接收客戶的請求,以及向客戶端回送響應的消息。Tomcat默認監聽的是8080端口,商業網站對外發布,若想用戶不輸入端口,使用http協議的默認端口,這裏就必須將其改成80。一個Service節點可以有多個Connector節點。一個端口只能對應一個進程,但是一個進程可以對應多個端口。

port:指定監聽客戶端請求的端口。 

protocol:指定傳輸協議。 

connectionTimeout:指定鏈接超時時間,毫秒。 

redirectPort:指定Service正在處理http請求時收到SSL請求後重定向的端口。

<Engine>元素:

處理監聽到的來自客戶端的http請求,一個Service節點僅有一個Engine節點,它負責接收和處理此Service所有的連接器收到的請求,向連接發回響應,並最終顯示在客戶端。<Engine>至少有一個<Host>元素,必須至少有一個<Host>屬性的名字與defaultHost指定的名字相匹配。

name:指定Engine的名字。

defaultHost:指定主機缺省時,默認的主機,必須是某個Host結點的name值。 

jvmRoute:在負載勻衡中使用的標識符,必須唯一

<Host>元素:

表示一個虛擬主機,爲特定的虛擬主機處理所有請求。一個Engine節點可以有多個Host節點,即多個虛擬主機。

name:指定虛擬主機的名字。該名字可以隨便定義,但是必須能被DNS解析到,要對應到指定的ip地址。

appBase:指定存放web應用程序的根目錄,如webapps,我們的站點根目錄都應該放在此目錄下。站點實際是一個有着特定結

構的文件夾,該文件夾的結構有着自己的特點,如必須有一個WEB—INF子文件夾,該子文件夾又必須有一個web.xml文件。 

unpackWARs:若爲true,war格式的web應用程序運行的時候會先解壓。web應用程序的根目錄下,可以放程序的war文件,

也可以放程序的根目錄。 

autoDeploy:指示Tomcat運行時,如有新的WEB程序加入appBase指定的目錄下,是否爲自動佈署,默認值爲true。

<Context>元素:

配置虛擬目錄和默認站點,一個Engin節點可以有多個Context節點,即多個虛擬目錄。我們在訪問http://locaohost:8080的時

候實際訪問的是http://locaohost:8080/ROOT/index.jsp。使用http協議,根據localhost定位到主機,根據端口8080定位到主

機上的Tomcat服務器Service進程,此時因爲用戶沒有指定站點和資源,則訪問conf下的server.xml配置的默認站點和資源。在

server.xml中找不到該配置,是因爲ROOT是通過硬編碼寫好的,但是可以通過配置文件修改成其他的站點。 

className:實現了org.apache.catalina.Context接口的類,標準實現類org.apache.catalina.core.StandardContext類

cookies:是否將Cookie應用於Session,默認值爲true

crossContext:是否允許跨域訪問,爲true時,在程序內調用ServletContext.getContext()方法將返回一個虛擬主機上其它web程序的請求調度器。默認值爲false,調 徑用getContext()返回爲null

docBase:絕對路徑或相對於Host的appBase 屬性的相對路徑

privileged:爲true,允許Web應用程序使用容器的Servlet

path:指定上下文路徑。一個虛擬主機中,上下文路徑必須唯一

reloadable:爲true,Tomcat運行時,如果WEB-INF/classes和WEB-INF/lib目錄中有改變,Tomcat會自動重新加載該WEB應用程序。雖方便,但開銷也大,默認值爲false,我們在調用可以打開,發佈後再關閉。

cacheMaxSize:靜態資源緩存最大值,以KB爲單位,默認值爲10240KB

cachingAllowed:是否允許靜態資源緩存,默認爲true

caseSensitive:默認爲true,資源文件名大小寫敏感,如果爲false大小寫不敏感

unpackWAR:默認爲true

workDir:爲WEB應用程序內部的Servlet指定臨時讀寫的目錄路徑名。如沒有設置,則Tomcat會在%CATALINA_HOME%/work目錄下提供一個合適的目錄

Tomcat性能優化方案

    內存優化

優化內存,主要是在bin/catalina.bat/sh 配置文件中進行。linux上,在catalina.sh中添加:

JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M"

其中:

• -server:啓用jdk的server版本。
• -Xms:虛擬機初始化時的最小堆內存。
• -Xmx:虛擬機可使用的最大堆內存。 #-Xms與-Xmx設成一樣的值,避免JVM因爲頻繁的GC導致性能大起大落
• -XX:PermSize:設置非堆內存初始值,默認是物理內存的1/64。
• -XX:MaxNewSize:新生代佔整個堆內存的最大值。
• -XX:MaxPermSize:Perm(俗稱方法區)佔整個堆內存的最大值,也稱內存最大永久保留區域。

連接數優化

優化線程數:(主要是在conf/server.xml配置文件中進行修改。

找到Connectorport="8080" protocol="HTTP/1.1",增加maxThreads和acceptCount屬性(使acceptCount大於等於maxThreads),如下:

<Connectorport="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />

其中:

• maxThreads:tomcat可用於請求處理的最大線程數,默認是200
• minSpareThreads:tomcat初始線程數,即最小空閒線程數
• maxSpareThreads:tomcat最大空閒線程數,超過的會被關閉
• acceptCount:當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理.默認100
使用線程池:

在server.xml中增加executor節點,然後配置connector的executor屬性,如下:

<Executorname="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/>
<Connectorport="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>

其中:

• namePrefix:線程池中線程的命名前綴
• maxThreads:線程池的最大線程數
• minSpareThreads:線程池的最小空閒線程數
• maxIdleTime:超過最小空閒線程數時,多的線程會等待這個時間長度,然後關閉
• threadPriority:線程優先級

注:當tomcat併發用戶量大的時候,單個jvm進程確實可能打開過多的文件句柄,這時會報java.net.SocketException:Too many open files錯誤。可使用下面步驟檢查:

• ps -ef |grep tomcat 查看tomcat的進程ID,記錄ID號,假設進程ID爲10001
• lsof -p 10001|wc -l 查看當前進程id爲10001的 文件操作數
• 使用命令:ulimit -a 查看每個用戶允許打開的最大文件數

運行模式

TomcatConnector的三種不同的運行模式性能相差很大,這三種模式的不同之處如下:

BIO:

一個線程處理一個請求。缺點:併發量高時,線程數較多,浪費資源。Tomcat7或以下,在Linux系統中默認使用這種方式。

NIO:

利用Java的異步IO處理,可以通過少量的線程處理大量的請求。Tomcat8在Linux系統中默認使用這種方式。

APR:

即Apache Portable Runtime,從操作系統層面解決io阻塞問題。Tomcat7或Tomcat8在Win7或以上的系統中啓動默認使用這種方式。Linux如果安裝了apr和native,Tomcat直接啓動就支持apr。


參考:https://blog.csdn.net/zilong0536/article/details/51591193

            https://www.cnblogs.com/SH-xuliang/p/5889615.html

            https://blog.csdn.net/wuliu_forever/article/details/52607177

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