1. 程式人生 > 其它 >Tomcat服務部署及優化

Tomcat服務部署及優化

目錄

一、Tomcat簡介

什麼是Tomcat

二、配置檔案介紹及核心元件

處理請求過程

三、Tomcat部署

1、部署及管理流程

2、環境部署

3、安裝啟動Tomcat

四、Tomcat 虛擬主機配置

五、Tomcat 優化

 

 

 

 

 

一、Tomcat簡介

1、什麼是Tomcat

自 2017 年 11 月程式語言排行榜 Java 佔比 13%,高居榜首,Tomcat 也一度成為 Java 開發人員的首選。其開源、佔用系統資源少、跨平臺等特性被深受喜愛。本章主要學習如何 部署 Tomcat 服務,根據生產環境實現多個虛擬主機的配置,最後的重點是進行壓測,根據 壓測結果如何優化 Tomcat 服務及常見的記憶體溢位如何處理。

Tomcat伺服器是一個免費的開放原始碼的Web應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP程式的首選。一般來說,Tomcat雖然和Apache或者Nginx這些Web伺服器一樣,具有處理HTML頁面的功能,然而由於其處理靜態HTML的能力遠不及Apache或者Nginx,所以Tomcat通常是作為一個Servlet和JSP容器,單獨執行在後端。

 

 

二、配置檔案介紹及核心元件

Web容器(①接收、響應請求 ②展示動態頁面):web應用服務

                  web-》可以通過http(s)來訪問一個頁面-》檔案

        web容器-》封裝一組檔案

     集中化管理-》一組資源物件

 

JSP容器(翻譯java-》servlet):nginx.html

                 html標記性語言
      只是用於按照定義的規則、格式

      來顯示靜態頁面
      index.php--》 PHP用的

      index.jsp---》tomcat用的
      動態頁面:可以讓使用者進行互動的一種可是話WEB類頁面

index.html-》 nginx可以直接展示的

index.php
index.jsp—》JAVA環境——》和資料庫互動

問題?怎麼互動,怎麼連線到後端??
index.jsp——》
除了進行靜態展示的html語言之外
還會有一些JAVA類程式碼——》就是執行對接後端的執行程式碼
所以我們需要在進行與使用者互動時,將使用者發出的請求、資料、傳輸到後端
但是index.jsp中的這些JAVA程式碼無法直接執行對接或者呼叫,需要先翻譯為可以直接執行的程式碼方式——》格式ServLet程式碼格式,servlet程式碼格式,就是JSP容器來處理

 

Servlet容器:做為執行servlet程式碼的一個容器

catalina———》具體寫了一些和記憶體相關的執行方式tomcat中,會以一種指令碼形式存在的(主要執行servlet程式碼  動態任務執行的標準格式),藉助於catelina來執行的

 

處理請求過程

使用者請求——》service(支撐tomcat的服務程序)
① 使用者點選網頁內容,請求被髮送到本機埠8080,被在那裡監聽的Coyote(Tomcat 聯結器框架/基礎環境) HTTP/1.1 Connector(聯結器,用於對接請求)獲得。

② 接受請求之後交給container(容器)中的engine進行處理,engine(引擎)是做為容器執行的動力核心
③ 基於引擎支撐,容器中會跑很多host虛擬主機/專案,這些虛擬主機中也會有很多context(當前程式所處的環境),此處的context功能可以理解為:將JAVA前端和JAVA後端連線的展示的樞紐
④ Servlet處理完後會返回給context
⑤ context返回給engine引擎
⑥ engine返回給埠
⑦ 埠最後將頁面展現給使用者

 

開發————》編譯(gcc jdk)——————》打包(jar/war)——————》釋出(tomcat),藉助tomcat 這個執行環境,將程式碼對應的功能模組執行起來

 

小結:

1、Tomcat : 首先,是一種web應用服務
2、tomcat所處的位置:一般來說,是在Nginx 之後,做為動態處理的服務
3、tomcat職能:做為JAVA類語言開發的應用所執行和持續執行的平臺
4、tomcat 組成部分: web 容器、jsp容器、servlet容器
5、tomcat 工作流程: 80——》8080是由connector聯結器監聽——》給與容器的engine引擎——》Host專案(webapps中,
對應專案的程式碼(解壓後))——》通過context 傳遞程式碼、連線——》應用的執行環境,最後執行servlet程式碼(動態的請
求任務),最後-》要麼對接資料庫、要麼直接返回給Nginx——》展示給使用者檢視

 

 

三、Tomcat部署

1、部署及管理流程

 

2、環境部署

① 關閉防火牆,將安裝 Tomcat 所需軟體包上傳

② 安裝 JDK

rpm -ivh jdk-8u201-linux-x64.rpm

#檢視當前系統環境下java版本
java -version

#設定JDK的環境變數

vim /etc/profile                                                                                                    #/etc/profile/環境變數指令碼目錄
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar    #可執行檔案的位置
export PATH=$JAVA_HOME/bin:$PATH

 

CLASSPATH:編譯、執行Java程式時(tomcat),JRE 會去該變數指定的路徑中搜索所需的類( .class)檔案。
dt.jar:是關於執行環境的類庫,主要是swing 的包。
tools.jar:主要是一 些 jdk 工具的類庫,包括 javac, java,javap, javadoc等。
JDK:java development kit ( java開發工具)
JRE:java runtime environment ( java執行時環境)
JVM:java virtuak machine (java虛擬機器) ,使 java程式可以在多種平臺上執行class檔案。

 

###載入生效、檢視版本
source /etc/profile
java -version

 

3、安裝啟動Tomcat

① 解壓apache-tomcat軟體包

tar zxvf apache-tomcat-9.0.16.tar.gz

mv apache-tomcat-9.0.16 /usr/local/tomcat

catalina.sh(管理執行severlet操作)可以進行tomcat的調優——》在catalina指令碼中進行-Xms -Xmx (最小和最大記憶體)
調優(win作業系統中進行)

 

#檢視目錄
cd /usr/local/tomcat/ && ll
主要目錄說明:
● bin :存放啟動和關閉Tomcat 的指令碼檔案,比較常用的是catalina.sh、startup.sh、 shutdown.sh 三個檔案
● conf :存放Tomcat 伺服器的各種配置檔案,比較常用的是server.xml、context.xml、tomcat-users.xml web. xml 四個檔案.
● lib :存放Tomcat伺服器的jar 包,一般不作任何改動,除非連線第三方服務,比如redis, 那就需要新增相對應的jar包
● logs :存放Tomcat 日誌
● temp :存放Tomcat 執行時產生的檔案
● ⭐⭐⭐webapps :存放專案資源的目錄
● work:Tomcat 工作目錄,一般清除 Tomcat 快取的時候會使用到

 

#Tomcat配置檔案詳解
① catalina.policy:許可權控制配置檔案
② catalina.properties:Tomcat的屬性配置檔案
③ ⭐⭐context.xml:上下文配置檔案
④ logging.properties:日誌相關配置檔案
⑤ ⭐⭐⭐server.xml:主配置檔案,通過配置檔案,可以修改tomcat的啟動埠、網站目錄、虛擬主機、開啟https等功能
⑥ tomcat-user.xml/.xsd:管理使用者配置檔案
制配置檔案
⑦ web.xml:Tomcat的servlet、servlet-mapping、filter、MIME等相關配置

 

 

##啟動tomcat##
#優化管理
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
#開啟服務
startup.sh
netstat -natp | grep 8080

 

#檢視網頁
此時使用瀏覽器訪問 Tomcat 的主頁 http://192.168.226.132:8080

 

#優化 Tomcat 啟動速度
① JDK 優化
② Tomcat 配置檔案
③ catalina.sh 優化
生產環境中第一次啟動 tomcat 可能會發現 tomcat 啟動很慢,預設情況下可能需要幾十秒,此時可以修改 jdk 引數進行優化。

以下部分,通過修改/usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security ,來提高tomcat(應用程式碼)啟動/執行
的速度

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
------修改117行-----
securerandom.source=file:/dev/urandom
##/dev/random和/dev/urandom都是偽終端,但是/dev/urandom提供的資料流更快

【瞭解】
JRE預設使用 /dev/random作為隨機數來源,當熵池大小不夠的時候,random會很慢,造成隨機數生成呼叫阻塞。

【熵池:安全方向,隨機值
概念:linux是根據系統的熵池來產生隨機數的。熵池就是系統當前的環境噪音,環境噪音的來源很多,鍵盤的輸入、滑鼠的移動、記憶體的使用、檔案的使用量、程序數量等等。
當系統的熵不夠大的時候,則系統產生的隨機數隨機效果就不是很好,也就是說更容易被人猜測出來。】

#主配置檔案/usr/local/tomcat/conf/server.xml

 

小結:
1、Tomcat : 首先,是一種web應用服務
2、tomcat所處的位置:一般來說,是在Nginx 之後,做為動態處理的服務
3、tomcat職能:做為JAVA類語言開發的應用所執行和持續執行的平臺
4、tomcat 組成部分: web 容器、jsp容器、servlet容器
5、tomcat 工作流程: 80——》8080是由connector聯結器監聽——》給與容器的engine引擎——》Host專案(webapps中,
對應專案的程式碼(解壓後))——》通過context 傳遞程式碼、連線——》應用的執行環境,最後執行servlet程式碼(動態的請
求任務),最後-》要麼對接資料庫、要麼直接返回給Nginx——》展示給使用者檢視

 

 

四、Tomcat 虛擬主機配置

虛擬主機的職能: 是模擬多個渠道(功能)
Nginx : 基於不同IP 基於不同埠 基於不同域名————》多個渠道/多個服務入口
資源足夠
1、管理便捷
2、可以充分使用
Nginx 伺服器的資源
3、降低架構的複雜度
4、方便自定義“擴容”

 

缺陷
1、其他資源支援
2、消耗相同的網路資源
3、單點故障

很多時候公司會有多個專案需要執行,很少會在一臺伺服器上執行多個 Tomcat 服務,這樣會消耗太多的系統資源。此時,就需要使用到 Tomcat 虛擬主機。例如現在新增兩個域名 www.kgc.com 和 www.benet.com ,希望通過這兩個域名訪問到不同的專案內容。(tomcat做為web 伺服器用的)

 

1、建立 kgc 和 benet 專案目錄和檔案
新增地址對映
vim /etc/hosts
192.168.147.4 www.kgc.com www.benet.com

 

mkdir /usr/local/tomcat/webapps/kgc
mkdir /usr/local/tomcat/webapps/benet
echo "this is kgc page\!" > /usr/local/tomcat/webapps/kgc/index.jsp
echo "this is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp

 

2、修改 Tomcat 主配置檔案
vim /usr/local/tomcat/conf/server.xml
#搜尋/Host name,檢視Host(虛擬主機)及其屬性

#配置詳解
Host name :主機名
appBase : Tomcat程式工作目錄,相對路徑為webapps,絕對路徑為/usr/local/tomcat/webapps
unpackWARs :tomcat在webapps資料夾中發現war包檔案時,是否自動將其解壓
autoDeploy :設為true,則web.xml發生變化時,tomcat自動重新部署程式。實現這個功能必需允許後臺處理
xmlValidation :是否開啟對XML檔案的驗證
xmlNamespaceAware :是否啟用xml名稱空間,如果設定該值與xmlValidation均為true,表示對web.xml檔案執行有效性檢驗

docBase : WEB應用的目錄(本地路徑)
path:設定訪問的URI為WEB應用的根目錄(URL路徑),""表示預設,載入系統中自帶的類(class檔案)
reloadable :是否在程式有改動時重新載入

 

 

#關閉、開啟
shutdown.sh
sleep 5 - 10 #Shell指令碼需要注意
startup.sh

瀏覽器訪問 http://www.kgc.com:8080 頁面顯示 this is kgc page!
瀏覽器訪問 http://www.benet.com:8080 頁面顯示 this is benet page!

 

五、Tomcat 優化

常用的優化相關引數如下Tomcat配置檔案引數優化----:

配置檔案中的優化:主要體現在connetor 配置段中

【 maxThreads 】 Tomcat 使用執行緒來處理接收的每個請求,這個值表示Tomcat 可建立的最大的執行緒數,預設值是200。

【 minSpareThreads 】最小空閒執行緒數,Tomcat 啟動時的初始化的執行緒數,表示即使沒有人使用也開這麼多空執行緒等待,預設值是10。

【 maxSpareThreads 】最大備用執行緒數,一旦建立的執行緒超過這個值,Tomcat 就會關閉不再需要的socket 執行緒。預設值是-1 ( 無限制)。一般不需要指定。

10個執行緒 ——》接收
100個 ——》併發
100個執行緒——》回收————》90 - 80 - 10

 

【 URIEncoding 】指定 Tomcat 容器的 URL 編碼格式,語言編碼格式這塊倒不如其它 Web 伺服器軟體配置方便,需要分別指定。

【 connnectionTimeout 】網路連線超時,單位:亳秒,設定為 0 表示永不超時,這樣設定有隱患的。通常預設20000亳秒就可以。

【 enableLookups 】是否反查域名,以返回遠端主機的主機名,取值為: true 或 false, 如果設定為false, 則直接返回IP 地址,為了提高處理能力,應設定為false。

【disableUploadTimeout 】上傳時是否使用超時機制。應設定為true。

【 connectionUploadTimeout 】上傳超時時間,畢竟檔案上傳可能需要消耗更多的時間,這個根據你自己的業務需要自己調,以使 Servlet 有較長的時間來完成它的執行,需要與上一個引數一起配合使用才會生效。

【 acceptCount 】指定當所有可以使用的處理請求的執行緒數都被使用時,可傳入連線請求的最大佇列長度,超過這個數的請求將不予處理,預設為100 個。

【 compression 】 是否對響應的資料進行GZIP壓縮,off:表示禁止壓縮; on:表示允許壓縮 (文字將被壓縮)、force:表示所有情況下都進行壓縮,預設值為off,壓縮資料後可以有效的減少頁面的大小,一般可以減小1/3左右,節省頻寬。

【 compressionMinSize】表示壓縮響應的最小值,只有當響應報文大小大於這個值的時候才會對報文進行壓縮,如果開啟了壓
縮功能,預設值就是2048

【 compressableMimeType 】壓縮型別,指定對哪些型別的檔案進行資料壓縮。

【 noCompressionUserAgents=“gozilla, traviata” 】 對於以下的瀏覽器,不啟用壓縮

以上是一些常用的配置引數,還有好多其它的引數設定,還可以繼續深入的優化,HTTP Connector 與AJP Connector 的引數屬性值.