tomcat以及集羣

Tomcat 快速入門

版本說明javascript

本文使用 Tomcat 版本爲 Tomcat 8.5.24。css

Tomcat 8.5 要求 JDK 版本爲 1.7 以上。html

簡介

Tomcat 是什麼

Tomcat 是由 Apache 開發的一個 Servlet 容器,實現了對 Servlet 和 JSP 的支持,並提供了做爲Web服務器的一些特有功能,如Tomcat管理和控制平臺、安全域管理和Tomcat閥等。java

因爲 Tomcat 自己也內含了一個 HTTP 服務器,它也能夠被視做一個單獨的 Web 服務器。可是,不能將 Tomcat 和 Apache HTTP 服務器混淆,Apache HTTP 服務器是一個用 C 語言實現的 HTTP Web 服務器;這兩個 HTTP web server 不是捆綁在一塊兒的。Tomcat 包含了一個配置管理工具,也能夠經過編輯XML格式的配置文件來進行配置。python

Tomcat 重要目錄

  • /bin - Tomcat 腳本存放目錄(如啓動、關閉腳本)。 *.sh 文件用於 Unix 系統; *.bat 文件用於 Windows 系統。
  • /conf - Tomcat 配置文件目錄。
  • /logs - Tomcat 默認日誌目錄。
  • /webapps - webapp 運行的目錄。

web 工程發佈目錄結構

通常 web 項目路徑結構linux

|-- webapp                         # 站點根目錄 |-- META-INF # META-INF 目錄 | `-- MANIFEST.MF # 配置清單文件 |-- WEB-INF # WEB-INF 目錄 | |-- classes # class文件目錄 | | |-- *.class # 程序須要的 class 文件 | | `-- *.xml # 程序須要的 xml 文件 | |-- lib # 庫文件夾 | | `-- *.jar # 程序須要的 jar 包 | `-- web.xml # Web應用程序的部署描述文件 |-- <userdir> # 自定義的目錄 |-- <userfiles> # 自定義的資源文件

webapp:工程發佈文件夾。其實每一個 war 包均可以視爲 webapp 的壓縮包。nginx

META-INF:META-INF 目錄用於存放工程自身相關的一些信息,元文件信息,一般由開發工具,環境自動生成。web

WEB-INF:Java web應用的安全目錄。所謂安全就是客戶端沒法訪問,只有服務端能夠訪問的目錄。apache

/WEB-INF/classes:存放程序所須要的全部 Java class 文件。vim

/WEB-INF/lib:存放程序所須要的全部 jar 文件。

/WEB-INF/web.xml:web 應用的部署配置文件。它是工程中最重要的配置文件,它描述了 servlet 和組成應用的其它組件,以及應用初始化參數、安全管理約束等。

 

tomcat安裝過程

上傳 apache-tomcat-8.0.52.tar.gz  和JDK-1.8.0   

tar -xvf jdk-1.8.0 -C /application/
 ln -s /application/jdk1.7.0_79/ /application/jdk

sed -i.ori '$a export JAVA_HOME=/application/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile

source /etc/profile
java -version               至此JDK安裝完成


tar -xvf apache-tomcat-8.0.52.tar.gz -C /application/
ln -s /application/apache-tomcat-8.0.52 /application/tomcat
echo 'export TOMCAT_HOME=/application/tomcat' >> /etc/profile
source /etc/profile
chown -R root.root /application/jdk /application/tomcat/
至此tomcat 安裝完成

若是啓動
# /application/tomcat/bin/startup.sh  #若是想弄/etc/init.d/寫個腳本調用這個就行
關閉程序
# /application/tomcat/bin/shutdown.sh    #############
TOMCAT 日誌文件
catalina.out ###若是有問題看這個文件日誌

# vim tomcat-users.xml  開啓網頁的管理功能,可是不安全,生產環境不建議使用,測試可使用

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

mv docs/ examples/ host-manager/ manager/ /tmp/  都移走,就不會有安全隱患了

mv ROOT/* /tmp/          

##########tomcat主配置文件 server.xml

war包放在webapps下面就能夠被訪問了

若是想修改默認路徑能夠填寫如下信息

125 <Context path="" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>

 

 

######tomcat多實例

# cp -a  apache-tomcat-8.0.52 tomcat1    ###cp整個目錄

vim /application/tomcat1/conf/server.xml 

22 8005---8011####這是關閉程序的端口

69 8080---8081 ####這是程序的端口號

123 <Host name="localhost" appBase="/data/www/www"
124 unpackWARs="true" autoDeploy="true">

mkdir /data/www/www/ROOT -p                 tomcat多站點統一用的目錄

vim index.jsp

<html>
<body>
    <center>Now time is: <%=new java.util.Date()%></center>
</body>
</html>

10.240.17.17:8081 訪問

 

###tomcat集羣

vim nginx.conf

server {

           listen 80;

   server_name  tomcat.abc.com;

   location / {

   proxy_pass http://tomcatpoll;

          proxy_set_header Host $host;

          proxy_set_header X-Forwarded-For $remote_addr;

}

}

 

定義個upstream tomcatpoll{

                                           10.0.0.1:8080    weight=1     max_fails=3 fail_timeout20s;

                                           10.0.0.2:8081    weight=1     max_fails=3 fail_timeout20s;

                                                                                         }

################以上集羣就能夠了。

 

Tomcat 的缺省配置是不能穩定長期運行的,也就是不適合生產環境,它會死機,讓你不斷從新啓動,甚至在午夜時分喚醒你。對於操做系統優化來講,是儘量的增大可以使用的內存容量、提升CPU 的頻率,保證文件系統的讀寫速率等。通過壓力測試驗證,在併發鏈接不少的狀況下,CPU 的處理能力越強,系統運行速度越快。

 

Tomcat 的優化不像其它軟件那樣,簡簡單單的修改幾個參數就能夠了,它的優化主要有三方面,分爲系統優化,Tomcat 自己的優化,Java 虛擬機(JVM)調優。系統優化就不在介紹了,接下來就詳細的介紹一下 Tomcat 自己與 JVM 優化,以 Tomcat 7 爲例。

Tomcat 自己優化

Tomcat 的自身參數的優化,這塊很像 ApacheHttp Server。修改一下 xml 配置文件中的參數,調整最大鏈接數,超時等。此外,咱們安裝 Tomcat 是,優化就已經開始了。

一、工做方式選擇

爲了提高性能,首先就要對代碼進行動靜分離,讓 Tomcat 只負責 jsp 文件的解析工做。如採用 Apache 和 Tomcat 的整合方式,他們之間的鏈接方案有三種選擇,JK、http_proxy 和 ajp_proxy。相對於 JK 的鏈接方式,後兩種在配置上比較簡單的,靈活性方面也一點都不遜色。但就穩定性而言不像JK 這樣久經考驗,因此建議採用 JK 的鏈接方式。 

二、Connector 鏈接器的配置

以前文件介紹過的 Tomcat 鏈接器的三種方式: bio、nio 和 apr,三種方式性能差異很大,apr 的性能最優, bio 的性能最差。而 Tomcat 7 使用的 Connector  默認就啓用的 Apr 協議,但須要系統安裝 Apr 庫,不然就會使用 bio 方式。

三、配置文件優化

配置文件優化其實就是對 server.xml 優化,能夠提大大提升 Tomcat 的處理請求的能力,下面咱們來看 Tomcat 容器內的優化。

默認配置下,Tomcat 會爲每一個鏈接器建立一個綁定的線程池(最大線程數 200),服務啓動時,默認建立了 5 個空閒線程隨時等待用戶請求。

首先,打開 ${TOMCAT_HOME}/conf/server.xml,搜索【<Executor name="tomcatThreadPool"】,開啓並調整爲

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="500" minSpareThreads="20" maxSpareThreads="50" maxIdleTime="60000"/>

注意, Tomcat 7 在開啓線程池前,必定要安裝好 Apr 庫,並能夠啓用,不然會有錯誤報出,shutdown.sh 腳本沒法關閉進程。

而後,修改<Connector …>節點,增長 executor 屬性,搜索【port="8080"】,調整爲

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               URIEncoding="UTF-8"
               connectionTimeout="30000"
               enableLookups="false"
               disableUploadTimeout="false"
               connectionUploadTimeout="150000"
               acceptCount="300"
               keepAliveTimeout="120000"
               maxKeepAliveRequests="1"
               compression="on"
               compressionMinSize="2048"
               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" 
               redirectPort="8443" />

maxThreads :Tomcat 使用線程來處理接收的每一個請求,這個值表示 Tomcat 可建立的最大的線程數,默認值是 200

minSpareThreads:最小空閒線程數,Tomcat 啓動時的初始化的線程數,表示即便沒有人使用也開這麼多空線程等待,默認值是 10。

maxSpareThreads:最大備用線程數,一旦建立的線程超過這個值,Tomcat 就會關閉再也不須要的 socket 線程。

上邊配置的參數,最大線程 500(通常服務器足以),要根據本身的實際狀況合理設置,設置越大會耗費內存和 CPU,由於 CPU 疲於線程上下文切換,沒有精力提供請求服務了,最小空閒線程數 20,線程最大空閒時間 60 秒,固然容許的最大線程鏈接數還受制於操做系統的內核參數設置,設置多大要根據本身的需求與環境。固然線程能夠配置在「tomcatThreadPool」中,也能夠直接配置在「Connector」中,但不能夠重複配置。

URIEncoding:指定 Tomcat 容器的 URL 編碼格式,語言編碼格式這塊倒不如其它 WEB 服務器軟件配置方便,須要分別指定。

connnectionTimeout: 網絡鏈接超時,單位:毫秒,設置爲 0 表示永不超時,這樣設置有隱患的。一般可設置爲 30000 毫秒,可根據檢測實際狀況,適當修改。

enableLookups: 是否反查域名,以返回遠程主機的主機名,取值爲:true 或 false,若是設置爲false,則直接返回IP地址,爲了提升處理能力,應設置爲 false。

disableUploadTimeout:上傳時是否使用超時機制。

connectionUploadTimeout:上傳超時時間,畢竟文件上傳可能須要消耗更多的時間,這個根據你本身的業務須要本身調,以使Servlet有較長的時間來完成它的執行,須要與上一個參數一塊兒配合使用纔會生效。

acceptCount:指定當全部可使用的處理請求的線程數都被使用時,可傳入鏈接請求的最大隊列長度,超過這個數的請求將不予處理,默認爲100個。

keepAliveTimeout:長鏈接最大保持時間(毫秒),表示在下次請求過來以前,Tomcat 保持該鏈接多久,默認是使用 connectionTimeout 時間,-1 爲不限制超時。

maxKeepAliveRequests:表示在服務器關閉以前,該鏈接最大支持的請求數。超過該請求數的鏈接也將被關閉,1表示禁用,-1表示不限制個數,默認100個,通常設置在100~200之間。

compression:是否對響應的數據進行 GZIP 壓縮,off:表示禁止壓縮;on:表示容許壓縮(文本將被壓縮)、force:表示全部狀況下都進行壓縮,默認值爲off,壓縮數據後能夠有效的減小頁面的大小,通常能夠減少1/3左右,節省帶寬。

compressionMinSize:表示壓縮響應的最小值,只有當響應報文大小大於這個值的時候纔會對報文進行壓縮,若是開啓了壓縮功能,默認值就是2048。

compressableMimeType:壓縮類型,指定對哪些類型的文件進行數據壓縮。

noCompressionUserAgents="gozilla, traviata": 對於如下的瀏覽器,不啓用壓縮。

若是已經對代碼進行了動靜分離,靜態頁面和圖片等數據就不須要 Tomcat 處理了,那麼也就不須要配置在 Tomcat 中配置壓縮了。

以上是一些經常使用的配置參數屬性,固然還有好多其它的參數設置,還能夠繼續深刻的優化,HTTP Connector 與 AJP Connector 的參數屬性值,能夠參考官方文檔的詳細說明:

https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

https://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html

2、JVM 優化

 Tomcat 啓動命令行中的優化參數,就是 JVM 的優化 。Tomcat 首先跑在 JVM 之上的,由於它的啓動其實也只是一個 java 命令行,首先咱們須要對這個 JAVA 的啓動命令行進行調優。不論是 YGC 仍是 Full GC,GC 過程當中都會對致使程序運行中中斷,正確的選擇不一樣的 GC 策略,調整 JVM、GC 的參數,能夠極大的減小因爲 GC 工做,而致使的程序運行中斷方面的問題,進而適當的提升 Java 程序的工做效率。可是調整 GC 是以個極爲複雜的過程,因爲各個程序具有不一樣的特色,如:web 和 GUI 程序就有很大區別(Web能夠適當的停頓,但GUI停頓是客戶沒法接受的),並且因爲跑在各個機器上的配置不一樣(主要 cup 個數,內存不一樣),因此使用的 GC 種類也會不一樣。

一、JVM 參數配置方法

Tomcat 的啓動參數位於安裝目錄 ${JAVA_HOME}/bin目錄下,Linux 操做系統就是 catalina.sh 文件。JAVA_OPTS,就是用來設置 JVM 相關運行參數的變量,還能夠在 CATALINA_OPTS 變量中設置。關於這 2 個變量,仍是多少有些區別的:

JAVA_OPTS:用於當 Java 運行時選項「start」、「stop」或「run」命令執行。

CATALINA_OPTS:用於當 Java 運行時選項「start」或「run」命令執行。

爲何有兩個不一樣的變量?它們之間都有什麼區別呢?

首先,在啓動 Tomcat 時,任何指定變量的傳遞方式都是相同的,能夠傳遞到執行「start」或「run」命令中,但只有設定在 JAVA_OPTS 變量裏的參數被傳遞到「stop」命令中。對於 Tomcat 運行過程,可能沒什麼區別,影響的是結束程序,而不是啓動程序。

第二個區別是更微妙,其餘應用程序也可使用 JAVA_OPTS 變量,但只有在 Tomcat 中使用 CATALINA_OPTS 變量。若是你設置環境變量爲只使用 Tomcat,最好你會建議使用 CATALINA_OPTS 變量,而若是你設置環境變量使用其它的 Java 應用程序,例如 JBoss,你應該把你的設置放在JAVA_OPTS 變量中。

二、JVM 參數屬性

32 位系統下 JVM 對內存的限制:不能突破 2GB ,那麼這時你的 Tomcat 要優化,就要講究點技巧了,而在 64 位操做系統上不管是系統內存仍是 JVM 都沒有受到 2GB 這樣的限制。

針對於 JMX 遠程監控也是在這裏設置,如下爲 64 位系統環境下的配置,內存加入的參數以下:(如下內容若是報錯,建議放一行,把雙引號去掉可解決)

set CATALINA_OPTS="
-server 
-Xms6000M 
-Xmx6000M 
-Xss512k 
-XX:NewSize=2250M 
-XX:MaxNewSize=2250M 
-XX:PermSize=128M
-XX:MaxPermSize=256M  
-XX:+AggressiveOpts 
-XX:+UseBiasedLocking 
-XX:+DisableExplicitGC 
-XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC 
-XX:MaxTenuringThreshold=31 
-XX:+CMSParallelRemarkEnabled 
-XX:+UseCMSCompactAtFullCollection 
-XX:LargePageSizeInBytes=128m 
-XX:+UseFastAccessorMethods 
-XX:+UseCMSInitiatingOccupancyOnly
-Duser.timezone=Asia/Shanghai 
-Djava.awt.headless=true"
相關文章
相關標籤/搜索