天天看點

Tomcat安裝、配置、優化及負載均衡詳解Tomcat安裝、配置、優化及負載均衡詳解

Tomcat安裝、配置、優化及負載均衡詳解

2018.08.19 14:28 字數 3157 閱讀 2 評論 0 喜歡 0

作者:rocomp

連結:https://www.cnblogs.com/rocomp

一、常見JavaWeb伺服器

1、WebLogic:是BEA公司的産品、WebSphereAS:是IBM公司的産品、JBossAS:紅帽公司的産品,可以自行了解

2、Tomcat伺服器:Sun公司在推出的小型Servlet/JSP調試工具的基礎上發展起來的一個優秀的Servlet容器,Tomcat本身完全用java語言編寫,是以tomcat的運作需要java的支援,是以要先安裝JDK,才能運作。

目前是Apache開源軟體組織的一個軟體項目,它的官網 :

http://tomcat.apache.org

Tomcat得到了廣大開源代碼志願者的大力支援,且可以和目前大部分的主流Web伺服器(IIS、Apache伺服器)一起工作,它運作穩定、可靠且高效。已成為目前開發企業JavaWeb應用的最佳Servlet容器選擇之一。

二、Tomcat的目錄結構及常用配置 1、Tomcat的目錄層次結構

bin:存放啟動和關閉Tomcat的腳本檔案

conf:存放Tomcat伺服器的各種配置檔案

lib:存放tomcat伺服器支撐的jar包

logs:存放Tomcat的日志檔案

temp:存放Tomcat運作時産生的臨時檔案

webapps:web應用雖在目錄,即供外界通路的web資源的存放目錄

work:Tomcat的工作目錄

2、JavaWeb應用的組成結構

mail—————————Web應用所在目錄

     |—-html、jsp、css、js等檔案,根目錄下的檔案外界可以直接通路

     |—-WEB-INF目錄

          |———classes目錄(java類)

          |———lib目錄(java類運作所需的jar包)

          |———web.xml(web應用的配置檔案)

      WEB-INF 這個目錄下的檔案外界無法直接通路,由web伺服器負責調用

3、JavaWeb應用的釋出

開放式目錄方式:

打包war方式:   使用   Jar -cvf *.war .

4、Tomcat的組成結構

Tomcat本身由一系列可配置的元件構成,其中核心元件是Servlet容器元件,它是所有其他Tomcat元件的頂層容器。

每個元件都可以在Tomcat安裝目錄/conf/server.xml檔案中進行配置,每個Tomcat元件在server.xml檔案中對應一種配置元素。下面用XML的形式展示各種Tomcat元件之間的關系    

代表整個Servlet容器元件,是最頂層元素,可以包含一個或多個元素

包含一個元素以及一個或多個元素,這些共享一個

代表和客戶程式實際互動的元件,負責接收客戶請求,以及向客戶傳回響應

每個元素隻能包含一個元素,它處理在同一個中所有接收到的客戶請求

在一個中可以包含多個,它代表一個虛拟主機(即一個伺服器程式可以部署在多個有不同IP的伺服器主機上),它可以包含一個或多個應用

使用最頻繁的元素,代表了運作在虛拟主機上的單個web應用

Host>

Engine>

Service>

Server>

5、Tomcat體系結構 6、虛拟目錄的映射方式

從Tomcat6開始,Tomcat支援自動映射,即tomcat伺服器會自動管理webapps目錄下的所有web應用,并把它映射成虛拟目錄,換句話說,隻需把web應用放在webapps目錄下,不需要配置Context,外界可以直接通路。

但是如果你不想講項目放在webapps下,而是放在其他地方,還是需要配置Context,比如我的tomcat在C槽,我的項目在D盤,則需要在Host下增加如下虛拟目錄映射語句。

Context>

7、Context元素配置

tomcat在加載一個web應用時,會一次按照以下五種方式查找web應用中的元素,優先級一次降低,直到找到為止

到Tomcat安裝目錄/conf/Context.xml檔案中查找元素。

到Tomcat安裝錄/conf/[enginename]/[hostname]/context.xml.default檔案中查找元素。

[enginename]:表示的name屬性

[hostname]:表示d的那麼屬性

到Tomcat安裝目錄/conf/[enginename]/[hostname]/[contextpath].xml檔案中查找元素

[contextpath]:表示單個Web應用的URL入口

到Web應用的META-INF/context.xml檔案中查找元素

到Tomcat安裝目錄/conf/server.xml檔案中查找元素。隻适用于單個Web應用

8、将項目部署為Tomcat預設應用

即通路 http://localhost:8080 時出來的是tomcat自帶的歡迎頁面,改為登入到自己的項目首頁。

方法一:

在Tomcat預設安裝後,tomcat的主目錄是webapps/root目錄,是以如果想改變tomcat的主目錄的話可以如下所做:

在/conf/server.xml檔案的之間加入代碼

Context>

方法二:

将tomcat安裝目錄下的ROOT下的所有檔案删除,換成自己項目的檔案,此法有點暴力。

方法三:

Tomcat5.0以下版本在C:/Tomcat/conf/Catalina/localhost目錄下會自動生成了一個ROOT.Xml,但是5.0以上版本不再生成此檔案。

是以可以建立個ROOT.xml,在裡面加入如下代碼:

Xml version=’1.0’encoding=’utf-8’?>

Context>

9、Context元素的屬性 path:

指定通路該Web應用的URL入口

docBase:

指定Web應用的檔案路徑,可以寫絕對路徑,也可以寫相對于appBase屬性的相對路徑

className:

指定實作Context元件的Java類的名字,這個類必須實作org.apache.catalina.Contex接口,該屬性預設值為org.apache.catalina.core.StandardContext(不建議大家改動)

reloadable:

如果為true,Tomcat伺服器在運作狀态下回監視在WEB-INF/classes和WEB-INF/lib目錄下的class檔案的改動,以及監視Web應用的WEB-INF/web.xml檔案的改動,如果檢測到有更新,伺服器會自動更新加載web應用。

其預設值為false。在開發和調試階段,将其改為true,一般像Eclipse等開發環境都會預設改為true。在正式釋出階段,應将其該為false,可以降低Tomcat的運作負荷,提高Tomcat的運作性能

在一般情況下,元素都會使用預設的标準Context元件,即className屬性采用預設值org.apache.catalina.core.StandardContext,它除了擁有上面介紹到的屬性外,還有自身專有的屬性:

cachingAllowed:是否允許啟用靜态資源(HTML、圖檔、聲音等)的緩存。預設值為true。

cacheMaxSize:設定靜态資源緩存的最大值,機關為K。

workDir:指定Web應用的工作目錄。

uppackWAR:如果為true,會把war檔案展開為開放目錄後再運作。為false,直接運作war檔案。預設值為true。

10、web.xml檔案

該檔案必須放在/WEB-INF目錄下,但是從7.0版本開始,Tomcat可以不使用web.xml檔案,而是使用注解方式。

三、Tomcat的優化 1、記憶體使用配置

Tomcat是依賴于JVM的,是以Tomcat的使用記憶體配置實質上是JVM的記憶體配置。

在/bin目錄下的catalina.bat可以直接通過Tomcat設定JVM記憶體參數,windows下打開catalina.bat檔案,在大概中間的位置,找到

set”JAVA_OPTS=%JAVA_OPT% -server -Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.awt.headless=true”

通過記憶體設定充分利用伺服器記憶體

-server:

模式啟動應用慢,但是極大程度提高運作性能

-Xms2048m -Xmx2048m:

設定的是堆記憶體

java8開始,PermSize被MetaspaceSize代替,MetaspaceSize共享heap,不會再有java.lang.OutOfMemoryError:PermGen space,可以不設定

Headless=true:

适用于Linux系統,與圖形操作有關,如生成驗證碼含義是目前的是無顯示器的伺服器,應用中如果擷取系統顯示有關的參數會抛出異常,windows系統可不用設定

可通過jmap -heap process_id檢視設定是否成功

2、最大連接配接數配置(并發能力)

在/conf/server.xml裡進行配置

在屬性中将protocol屬性改為

“org.apache.coyote.http11.Http11NioProtocol”,

NIO模型的效率更高

加入

maxThreads=”500”

//目前可以同時處理的最大使用者通路數

minSpareThreads=”100”

//最小空閑線程連接配接數,用于優化線程池

maxSpareThreads=”200”

acceptCount=”200”

//當所有的線程以配置設定,仍然允許連接配接進來,但是出于等待狀态的使用者數。

//等待線程數+工作線程數=總的可最大連接配接數,如果超過此數,

//新的連接配接将不會被接受,就會産生一個http錯誤

enableLookups=”false”

//是否允許DNS反查,如果為true,request.getRemoteHost會執行DNS查找,反向解析ip對應域名或主機名,

//當沒有這樣需要的時候,可以将這個功能關閉,在一定程度上提高了Tomcat伺服器的性能

四、負載均衡配置

負載均衡是提高應用負載量和容錯的有效手段,可以結合Nginxs與Tomcat實作,Nginx是一款性能優異的反向代理伺服器。

1、負載均衡配置實作

反向代理原理示意圖:

負載均衡示意圖:

負載均衡政策:

 Nginx 提供輪詢(round robin)、使用者IP哈希(client IP)和指定權重 3 種方式

2、負載均衡時Session的處理政策

Session是Tomcat伺服器上的記憶體空間,如果一個使用者發出多個請求,卻發到了多個tomcat伺服器中,那麼就會出現Session不同步的問題

解決方案1

将一個使用者的請求鎖定到某一台伺服器上,簡單,但是缺乏容錯性,一旦某個伺服器發生故障,Session可能丢失,(但是伺服器發生故障是一個低機率事件,如果一個伺服器經常挂掉,要麼是硬體有問題,要麼是應用有問題)

可以使用使用者IP哈希實作

解決方案2

Session複制政策,基于網絡的廣播政策,一個節點Session變化,其他節點同步複制,具有容錯性,但節點多或複制量大時對網絡負荷大,使網絡效率低下,甚至阻塞

① 在/conf/server.xml檔案中開啟Session複制的選項,将注釋去掉,7.0預設值以配置好,需要接收器綁定内網(一般伺服器都有兩塊網卡)網卡位址,修改端口>。

② 在應用中指定應用是在分布式部署之下,在web.xml中添加選項

解決方案3

額外建立一個共享的空間用來存放Session,所有伺服器共享一個Session

memcached緩存共享方案基本原理

粘性Session與非粘性Session方式:

需要一些工具jar包,官網有目錄和下載下傳連接配接,在/conf/context.xml中進行配置,全局有效。

3、叢集環境中應用代碼應注意的問題

傳遞Session需要實體類序列化支援,實作可序列化接口,設定版本号。

擷取使用者IP位址方法的變化,擷取真實用戶端ip而不是Nginx代理位址。

動靜分離結構的預規劃。一般高并發的網站上,資源類的檔案,如js,css,圖檔通常是由靜态伺服器處理,Nginx處理靜态檔案效率就非常高,而tomcat處理靜态檔案是它很大的一個弱勢,tomcat隻負責動态請求的處理。

那麼編碼的時候就要考慮靜态資源最後可能要被拿出去,位址會有變化,是以在開發的時候應該規劃通路位址,保持最大靈活性。

公衆号:javafirst