做網(wǎng)站怎么插入圖片推廣宣傳
Tomcat部署及優(yōu)化
- 一、Tomcat的介紹
- 1.Tomcat核心組件
- 2.Tomcat 功能組件結(jié)構(gòu)
- 3.Container 結(jié)構(gòu)分析:
- 4.Tomcat處理請(qǐng)求過(guò)程
- 二、Tomcat 部署步驟
- 1.關(guān)閉防火墻,將安裝 Tomcat 所需軟件包傳到/opt目錄下
- 2.安裝JDK
- 3.設(shè)置JDK環(huán)境變量
- 4.編寫(xiě)一個(gè)java 簡(jiǎn)易的源代碼,進(jìn)行環(huán)境測(cè)試
- 5.安裝啟動(dòng)Tomcat
- 6.啟動(dòng)Tomcat
- 7.開(kāi)啟tomcat服務(wù),測(cè)試訪問(wèn)tomcat的默認(rèn)首頁(yè)
- 8.優(yōu)化tomcat啟動(dòng)速度
- 9.主要目錄說(shuō)明
- 三、Tomcat的虛擬主機(jī)配置
- 1.創(chuàng)建 kgc 和 benet 項(xiàng)目目錄和文件
- 2.修改 Tomcat 主配置文件 server.xml
- 3.重啟Tomcat服務(wù)
- 4.客戶端瀏覽器訪問(wèn)驗(yàn)證
- 四、Tomcat 優(yōu)化
- Tomcat 配置文件參數(shù)優(yōu)化
一、Tomcat的介紹
Tomcat 是 Java 語(yǔ)言開(kāi)發(fā)的,Tomcat 服務(wù)器是一個(gè)
免費(fèi)的開(kāi)放源代碼的 Web 應(yīng)用服務(wù)器
,是 Apache 軟件基金會(huì)的 Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由 Apache、Sun 和其他一些公司及個(gè)人共同開(kāi)發(fā)而成。
Tomcat 屬于輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問(wèn)用戶(據(jù)了解tomcat的并發(fā)量處理能力是nginx的六分之一)不是很多的場(chǎng)合下被普遍使用,是開(kāi)發(fā)和調(diào)試 JSP 程序的首選。一般來(lái)說(shuō),Tomcat 雖然和 Apache 或者 Nginx 這些 Web 服務(wù)器一樣,具有處理 HTML 頁(yè)面的功能,然而由于其處理靜態(tài) HTML 的能力遠(yuǎn)不及 Apache 或者 Nginx,所以 Tomcat 通常是作為一個(gè) Servlet 和 JSP 容器
,單獨(dú)運(yùn)行在后端。
1.Tomcat核心組件
Tomcat 是 Web 應(yīng)用服務(wù)器,也是一個(gè) Servlet/JSP 容器。Tomcat 作為 Servlet 容器,負(fù)責(zé)處理客戶的.jsp動(dòng)態(tài)頁(yè)面的請(qǐng)求,把請(qǐng)求傳送給 Servlet,并將 Servlet 的響應(yīng)傳送回給客戶。
(1)Web 容器:完成 Web 服務(wù)器的功能。
(2)Servlet 容器:名字為 catalina,用于處理 Servlet 代碼。
(3)JSP 容器:用于將 JSP 動(dòng)態(tài)網(wǎng)頁(yè)翻譯成 Servlet 代碼。
Servlet :是Java Servlet 的簡(jiǎn)稱,可以理解為是一個(gè)服務(wù)連接器
,是用 Java 編寫(xiě)的服務(wù)器端程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性
簡(jiǎn)單的理解:servlet 就是一個(gè)中間件
,包含了接口和方法,將客戶端和數(shù)據(jù)庫(kù)連接,從而實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)的創(chuàng)建。
JSP: 全稱 Java Server Pages,是一種動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)
。它使用 JSP 標(biāo)簽在HTML網(wǎng)頁(yè)中插入 Java 代碼。標(biāo)簽通常以 <% 開(kāi)頭,以 %> 結(jié)束。也是一種 Java servlet,主要用于實(shí)現(xiàn) Java web 應(yīng)用程序的用戶界面部分。
JSP 通過(guò)網(wǎng)頁(yè)表單獲取用戶輸入數(shù)據(jù)、訪問(wèn)數(shù)據(jù)庫(kù)及其他數(shù)據(jù)源,然后動(dòng)態(tài)地創(chuàng)建網(wǎng)頁(yè)。
2.Tomcat 功能組件結(jié)構(gòu)
Tomcat的核心功能有兩個(gè),分別是負(fù)責(zé)接收和反饋外部請(qǐng)求的連接器
Connector
,和負(fù)責(zé)處理請(qǐng)求的容器Container
。其中連接器和容器相輔相成,一起構(gòu)成了基本的web服務(wù) Service。每個(gè) Tomcat 服務(wù)器可以管理多個(gè) Service。
Connector
:負(fù)責(zé)對(duì)外接收和響應(yīng)請(qǐng)求
。它是Tomcat與外界的交通樞紐,監(jiān)聽(tīng)端口接收外界請(qǐng)求,并將請(qǐng)求處理后傳遞給容器做業(yè)務(wù)處理,最后將容器處理后的結(jié)果響應(yīng)給外界。
Container
:負(fù)責(zé)對(duì)內(nèi)處理業(yè)務(wù)邏輯
。其內(nèi)部由 Engine、Host、Context和Wrapper 四個(gè)容器組成,用于管理和調(diào)用 Servlet 相關(guān)邏輯。
Service
:對(duì)外提供的 Web 服務(wù)。主要包含 Connector 和 Container 兩個(gè)核心組件,以及其他功能組件。Tomcat 可以管理多個(gè) Service,且各 Service 之間相互獨(dú)立。
3.Container 結(jié)構(gòu)分析:
每個(gè) Service 會(huì)包含一個(gè) Container 容器。在 Container 內(nèi)部包含了 4 個(gè)子容器
4個(gè)子容器的作用
子容器 | 作用 |
---|---|
Engine | 引擎,用來(lái)管理多個(gè)虛擬主機(jī),一個(gè) Service 最多只能有一個(gè) Engine |
Host | 代表一個(gè)虛擬主機(jī),也可以叫站點(diǎn),通過(guò)配置 Host 就可以添加站點(diǎn) |
Context | 代表一個(gè) Web 應(yīng)用,包含多個(gè) Servlet 封裝器 |
Wrapper | 封裝器,容器的最底層。每一 Wrapper 封裝著一個(gè) Servlet,負(fù)責(zé)對(duì)象實(shí)例的創(chuàng)建、執(zhí)行和銷毀功能 |
Engine、Host、Context 和 Wrapper,這四個(gè)容器之間屬于層層遞進(jìn)的父子關(guān)系。
容器由一個(gè)引擎(Engine)可以管理多個(gè)虛擬主機(jī)(Host)。每個(gè)虛擬主機(jī)(Host)可以管理多個(gè) Web 應(yīng)用(Context)。每個(gè) Web 應(yīng)用會(huì)有多個(gè) Servlet 封裝器(Wrapper)。
4.Tomcat處理請(qǐng)求過(guò)程
- 用戶在瀏覽器中輸入網(wǎng)址,請(qǐng)求被發(fā)送到本機(jī)端口 8080,被在那里監(jiān)聽(tīng)的 Connector 獲得;
- Connector 把該請(qǐng)求交給它所在的 Service 的 Engine(Container)來(lái)處理,并等待 Engine 的回應(yīng);
- 請(qǐng)求在 Engine、Host、Context 和 Wrapper 這四個(gè)容器之間層層調(diào)用,最后在 Servlet 中執(zhí)行對(duì)應(yīng)的業(yè)務(wù)邏輯、數(shù)據(jù)存儲(chǔ)等。
- 執(zhí)行完之后的請(qǐng)求響應(yīng)在 Context、Host、Engine 容器之間層層返回,最后返回給 Connector,并通過(guò) Connector 返回給客戶端。
二、Tomcat 部署步驟
本次部署準(zhǔn)備的版本安裝包(版本根據(jù)需求): jdk-8u201-linux-x64.rpm(jdk環(huán)境包,是tomcat的運(yùn)行環(huán)境) apache-tomcat-9.0.16.tar.gz(tomcat服務(wù)軟件包)
1.關(guān)閉防火墻,將安裝 Tomcat 所需軟件包傳到/opt目錄下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gzsystemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.安裝JDK
cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
java -version
3.設(shè)置JDK環(huán)境變量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATHsource /etc/profile.d/java.sh
java -version注
JDK :java development kit (java開(kāi)發(fā)工具)
JRE :java runtime environment (java運(yùn)行時(shí)環(huán)境)
JVM :java virtuak machine (java虛擬機(jī)),使java程序可以在多種平臺(tái)上運(yùn)行class文件。
CLASSPATH:告訴jvm要使用或執(zhí)行的class放在什么路徑上,便于JVM加載class文件。
tools.jar:是系統(tǒng)用來(lái)編譯一個(gè)類的時(shí)候用到的,即執(zhí)行javac的時(shí)候用到。
dt.jar:dt.jar是關(guān)于運(yùn)行環(huán)境的類庫(kù),主要是swing包。
4.編寫(xiě)一個(gè)java 簡(jiǎn)易的源代碼,進(jìn)行環(huán)境測(cè)試
vim Hello.java
public class Hello { public static void main(String[] args){System.out.println("Hello world!");}
}javac Hello.java #編譯源代碼java Hello #編譯源代碼注:
類名、接口名命令:英文大小寫(xiě)字母、數(shù)字字符、$和_,不能使用關(guān)鍵字和數(shù)字開(kāi)頭;
一個(gè)單詞命名時(shí)第一個(gè)單詞的首字母要大寫(xiě);多單詞組成時(shí),所有單詞的首字母大寫(xiě):XxxYyyZzz(大駝峰命名法)
5.安裝啟動(dòng)Tomcat
cd /opt
解壓tomcat軟件包
tar zxvf apache-tomcat-9.0.16.tar.gz移動(dòng)至服務(wù)軟件包統(tǒng)一管理目錄中,并且簡(jiǎn)易其名稱
mv apache-tomcat-9.0.16 /usr/local/tomcat
6.啟動(dòng)Tomcat
后臺(tái)啟動(dòng)
/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat/bin/catalina.sh start
后臺(tái)關(guān)閉
/usr/local/tomcat/bin/shutdown.sh
前臺(tái)啟動(dòng)
/usr/local/tomcat/bin/catalina.sh run
7.開(kāi)啟tomcat服務(wù),測(cè)試訪問(wèn)tomcat的默認(rèn)首頁(yè)
瀏覽器訪問(wèn)Tomcat的默認(rèn)主頁(yè) http://192.168.30.10:8080
8.優(yōu)化tomcat啟動(dòng)速度
第一次啟動(dòng)tomcat可能會(huì)發(fā)現(xiàn) Tomcat 啟動(dòng)很慢,默認(rèn)情況下可能會(huì)需要幾十秒,可以修改jdk參數(shù)進(jìn)行改。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom
該方法的原理說(shuō)明:
tomcat 啟動(dòng)慢的原因是隨機(jī)數(shù)(產(chǎn)生隨機(jī)數(shù)的函數(shù) random)產(chǎn)生遭到阻塞,遭到阻塞的原因是 熵池大小 。
/dev/random
:阻塞型,讀取它就會(huì)產(chǎn)生隨機(jī)數(shù)據(jù),但該數(shù)據(jù)取決于熵池噪聲,當(dāng)熵池空了,對(duì)/dev/random 的讀操作也將會(huì)被阻塞。
/dev/urandom
:非阻塞的隨機(jī)數(shù)產(chǎn)生器,它會(huì)重復(fù)使用熵池中的數(shù)據(jù)以產(chǎn)生偽隨機(jī)數(shù)據(jù)。這表示對(duì)/dev/urandom的讀取操作不會(huì)產(chǎn)生阻塞,但其輸出的熵可能小于/dev/random的。它可以作為生成較低強(qiáng)度密碼的偽隨機(jī)數(shù)生成器,不建議用于生成高強(qiáng)度長(zhǎng)期密碼。
9.主要目錄說(shuō)明
目錄 | 說(shuō)明 |
---|---|
bin | 存放啟動(dòng)和關(guān)閉 Tomcat 的腳本文件,如 catalina.sh、startup.sh、shutdown.sh |
conf | 存放 Tomcat 服務(wù)器的各種配置文件,如主配置文件 server.xml 和 應(yīng)用默認(rèn)的部署描述文件 web.xml |
lib | 存放 Tomcat 運(yùn)行需要的庫(kù)文件的 jar 包,一般不作任何改動(dòng) |
logs | 存放 Tomcat 執(zhí)行時(shí)的日志 |
temp | 存放 Tomcat 運(yùn)行時(shí)產(chǎn)生的文件 |
webapps | 存放 Tomcat 默認(rèn)的 Web 應(yīng)用項(xiàng)目資源的目錄 |
work | Tomcat 的工作目錄,存放 Web 應(yīng)用代碼生成和編譯文件 |
三、Tomcat的虛擬主機(jī)配置
很多時(shí)候公司會(huì)有多個(gè)項(xiàng)目需要運(yùn)行,一般不會(huì)是在一臺(tái)服務(wù)器上運(yùn)行多個(gè) Tomcat 服務(wù),這樣會(huì)消耗太多的系統(tǒng)資源。此時(shí), 就需要使用到 Tomcat 虛擬主機(jī)。
例如現(xiàn)在新增兩個(gè)域名 www.ztm.com 和 www.hss.com, 希望通過(guò)這兩個(gè)域名訪問(wèn)到不同的項(xiàng)目?jī)?nèi)容。
1.創(chuàng)建 kgc 和 benet 項(xiàng)目目錄和文件
mkdir /usr/local/tomcat/webapps/ztm
mkdir /usr/local/tomcat/webapps/hss
echo "This is ztm page\!" > /usr/local/tomcat/webapps/ztm/index.jsp
echo "This is hss page\!" > /usr/local/tomcat/webapps/hss/index.jsp
2.修改 Tomcat 主配置文件 server.xml
vim /usr/local/tomcat/conf/server.xml
165行前--插入
<Host name="www.ztm.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/ztm" path="" reloadable="true" />
</Host><Host name="www.hss.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/hss" path="" reloadable="true" />
</Host>
注: 虛擬主機(jī)中的配置標(biāo)簽說(shuō)明
Host 標(biāo)簽中的配置項(xiàng) | 說(shuō)明 |
---|---|
name | 主機(jī)名 |
appBase | Tomcat程序工作目錄,即存放web應(yīng)用程序的目錄;相對(duì)路徑為webapps,絕對(duì)路徑為 /usr/local/tomcat/webapps |
unpackWARs | 在啟用此webapps時(shí)是否對(duì)WAR格式的歸檔文件先進(jìn)行展開(kāi);默認(rèn)為true |
autoDeploy | 在Tomcat處于運(yùn)行狀態(tài)時(shí)放置于appBase目錄中的應(yīng)用程序文件是否自動(dòng)進(jìn)行deploy;默認(rèn)為true |
xmlValidation | 是否驗(yàn)證xml文件執(zhí)行有效性檢驗(yàn)的標(biāo)志 |
xmlNamespaceAware | 是否啟用xml命名空間,設(shè)置該值與xmlValidation為true,表示對(duì)web.xml文件執(zhí)行有效性檢驗(yàn) |
Context 標(biāo)簽中的配置項(xiàng) | 說(shuō)明 |
---|---|
docBase | 相應(yīng)的Web應(yīng)用程序的存放位置;也可以使用相對(duì)路徑,起始路徑為此Context所屬Host中appBase定義的路徑; |
path | 相對(duì)于Web服務(wù)器根路徑而言的URI;如果為空"",則表示為此webapp的根路徑 / ; |
reloadable | 是否允許重新加載此context相關(guān)的Web應(yīng)用程序的類;默認(rèn)為false |
3.重啟Tomcat服務(wù)
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
4.客戶端瀏覽器訪問(wèn)驗(yàn)證
echo "192.168.30.10 www.ztm.com www.benet.com" >> /etc/hosts
瀏覽器訪問(wèn) http://www.ztm.com:8080/ 頁(yè)面顯示This is ztm page!
瀏覽器訪問(wèn) http://www.hss.com:8080/ 頁(yè)面顯示This is hss page!
四、Tomcat 優(yōu)化
Tomcat默認(rèn)安裝下的缺省配置并不適合生產(chǎn)環(huán)境,它可能會(huì)頻繁出現(xiàn)假死現(xiàn)象需要重啟,只有通過(guò)不斷壓測(cè)優(yōu)化才能讓它最高效率穩(wěn)定的運(yùn)行。
優(yōu)化主要包括三方面,分別為操作系統(tǒng)優(yōu)化(內(nèi)核參數(shù)優(yōu)化),Tomcat配置文件參數(shù)優(yōu)化,Java虛擬機(jī)(JVM)調(diào)優(yōu)。
Tomcat 配置文件參數(shù)優(yōu)化
常用的優(yōu)化相關(guān)參數(shù)如下
優(yōu)化參數(shù) | 說(shuō)明 |
---|---|
redirectPort | 如果某連接器支持的協(xié)議是HTTP,當(dāng)接收客戶端發(fā)來(lái)的HTTPS請(qǐng)求時(shí),則轉(zhuǎn)發(fā)至此屬性定義的 8443 端口。 |
maxThreads | Tomcat使用線程來(lái)處理接收的每個(gè)請(qǐng)求,這個(gè)值表示Tomcat可創(chuàng)建的最大的線程數(shù),即支持的最大并發(fā)連接數(shù),默認(rèn)值是 200。 |
minSpareThreads | 最小空閑線程數(shù),Tomcat 啟動(dòng)時(shí)的初始化的線程數(shù),表示即使沒(méi)有人使用也開(kāi)這么多空線程等待,默認(rèn)值是 10。 |
maxSpareThreads | 最大備用線程數(shù),一旦創(chuàng)建的線程超過(guò)這個(gè)值,Tomcat就會(huì)關(guān)閉不再需要的socket線程。默認(rèn)值是-1(無(wú)限制)。一般不需要指定。 |
processorCache | 進(jìn)程緩沖器,可以提升并發(fā)請(qǐng)求。默認(rèn)值是200,如果不做限制的話可以設(shè)置為-1,一般采用maxThreads的值或者-1。 |
URIEncoding | 指定 Tomcat 容器的 URL 編碼格式,網(wǎng)站一般采用UTF-8作為默認(rèn)編碼。 |
connnectionTimeout | 網(wǎng)絡(luò)連接超時(shí),單位:毫秒,設(shè)置為 0 表示永不超時(shí),這樣設(shè)置有隱患的。通常默認(rèn) 20000 毫秒就可以。 |
enableLookups | 是否反查域名,以返回遠(yuǎn)程主機(jī)的主機(jī)名,取值為:true 或 false,如果設(shè)置為 false,則直接返回 IP 地址,為了提高處理能力,應(yīng)設(shè)置為 false。 |
disableUploadTimeout | 上傳時(shí)是否使用超時(shí)機(jī)制。應(yīng)設(shè)置為 true。 |
connectionUploadTimeout | 上傳超時(shí)時(shí)間,畢竟文件上傳可能需要消耗更多的時(shí)間,這個(gè)根據(jù)你自己的業(yè)務(wù)需要自己調(diào),以使Servlet有較長(zhǎng)的時(shí)間來(lái)完成它的執(zhí)行,需要與上一個(gè)參數(shù)一起配合使用才會(huì)生效。 |
acceptCount | 指定當(dāng)所有可以使用的處理請(qǐng)求的線程數(shù)都被使用時(shí),可傳入連接請(qǐng)求的最大隊(duì)列長(zhǎng)度,超過(guò)這個(gè)數(shù)的請(qǐng)求將不予處理,默認(rèn)為 100 個(gè)。 |
maxKeepAliveRequests | 指定一個(gè)長(zhǎng)連接的最大請(qǐng)求數(shù)。默認(rèn)長(zhǎng)連接是打開(kāi)的,設(shè)置為1時(shí),代表關(guān)閉長(zhǎng)連接;為-1時(shí),代表請(qǐng)求數(shù)無(wú)限制 |
compression | 是否對(duì)響應(yīng)的數(shù)據(jù)進(jìn)行GZIP壓縮,off:表示禁止壓縮;on:表示允許壓縮(文本將被壓縮)、force:表示所有情況下都進(jìn)行壓縮,默認(rèn)值為 off,壓縮數(shù)據(jù)后可以有效的減少頁(yè)面的大小,一般可以減小 1/3 左右,節(jié)省帶寬。 |
compressionMinSize | 表示壓縮響應(yīng)的最小值,只有當(dāng)響應(yīng)報(bào)文大小大于這個(gè)值的時(shí)候才會(huì)對(duì)報(bào)文進(jìn)行壓縮,如果開(kāi)啟了壓縮功能,默認(rèn)值就是 2048。 |
compressableMimeType | 壓縮類型,指定對(duì)哪些類型的文件進(jìn)行數(shù)據(jù)壓縮。 |
noCompressionUserAgents=“gozilla, traviata” | 對(duì)于以下的瀏覽器,不啟用壓縮 |
如果已經(jīng)進(jìn)行了動(dòng)靜分離處理,靜態(tài)頁(yè)面和圖片等數(shù)據(jù)就不需做 Tomcat 處理,也就不要在 Tomcat 中配置壓縮了。
vim /usr/local/tomcat/conf/server.xml
......
<Connector port="8080" protocol="HTTP/11.1"
connectionTimeout="20000"
redirectPort="8443"
--71行--插入
minSpareThreads="50"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="300"
maxThreads="500"
processorCache="500"
URIEncoding="UTF-8"
maxKeepAliveRequests="100"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>