溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

淺談Tomcat服務(wù)器安裝及優(yōu)化

發(fā)布時(shí)間:2020-09-03 01:24:26 來源:網(wǎng)絡(luò) 閱讀:607 作者:筱振 欄目:系統(tǒng)運(yùn)維

博文大綱:
一、Tomcat概述
二、Tomcat組件及其特點(diǎn)
三、安裝Tomcat
四、Tomcat中server.xml 文件結(jié)構(gòu)
五、多實(shí)例(一臺(tái)主機(jī)運(yùn)行多個(gè)Tomcat)
六、自定義目錄
七、使用Tomcat實(shí)時(shí)監(jiān)控JVM虛擬機(jī)資源使用情況
八、開啟JMX遠(yuǎn)程調(diào)試功能
九、配置使用https訪問tomcat服務(wù)器
十、開啟Manager管理頁面
十一、開啟host-mangent管理頁面
十二、分割Tomcat的運(yùn)行日志
十三、定義Tomcat 404錯(cuò)誤返回的頁面
十四、Tomcat服務(wù)的內(nèi)存優(yōu)化
十五、Tomcat線程池的優(yōu)化
十六、更改Tomcat服務(wù)的請求方式

一、Tomcat概述

Tomcat是apache軟件基金會(huì)項(xiàng)目中的一個(gè)核心項(xiàng)目,是一個(gè)免費(fèi)的開放源代碼的web應(yīng)用服務(wù)器,屬于輕量級(jí)的應(yīng)用服務(wù)器,在中小型企業(yè)和訪問并不是很高的場景很受歡迎,普遍被使用,而且在開發(fā)和調(diào)試JSP程序的首選!

可以這樣認(rèn)為,當(dāng)一臺(tái)服務(wù)器部署好Apache服務(wù)器后,可以利用Apache服務(wù)器響應(yīng)客戶端的靜態(tài)頁面訪問請求,而Tomcat是Apache服務(wù)器的擴(kuò)展,當(dāng)運(yùn)行Tomcat的時(shí)候?qū)嶋H上是作為一個(gè)Apache獨(dú)立的進(jìn)程單獨(dú)運(yùn)行的,Apache服務(wù)器為靜態(tài)頁面提供服務(wù),而Tomcat是解析JSP頁面和servlet,并且Tomcat也具備靜態(tài)頁面的解析能力,但是跟Apache相比還是有些區(qū)別的。

關(guān)于Tomcat的內(nèi)容可不是一兩句話就可以說完的,建議訪問Tomcat官網(wǎng)詳細(xì)了解!

二、Tomcat組件及其特點(diǎn)

1.Servlet是什么?

Servlet(Server Applet):是Java Servlet的簡稱,稱為小服務(wù)程序或服務(wù)連接器,用Java編寫的服務(wù)器端程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,主要功能在于交互式地瀏覽和生成數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容。狹義的Servlet是指Java語言實(shí)現(xiàn)的一個(gè)接口;廣義的Servlet是指任何實(shí)現(xiàn)了這個(gè)Servlet接口的類;一般情況下,人們將Servlet理解為后者。
Servlet運(yùn)行于支持Java的應(yīng)用服務(wù)器中。從原理上講,Servlet可以響應(yīng)任何類型的請求,但絕大多數(shù)情況下Servlet只用來擴(kuò)展基于HTTP協(xié)議的Web服務(wù)器。

Tomcat處理請求和響應(yīng)的過程都是由servlet程序來完成的,并且servlet是為解決實(shí)現(xiàn)動(dòng)態(tài)頁面衍生的內(nèi)容,與Nginx和Apache想要實(shí)現(xiàn)動(dòng)態(tài)頁面需要和PHP服務(wù)器溝通的過程一樣,就可以把servlet看做LAMP或LNMP中的PHP。如圖:
淺談Tomcat服務(wù)器安裝及優(yōu)化

Tomcat是web應(yīng)用服務(wù)器,是一個(gè)servlet/jsp容器,Tomcat作為servlet容器,負(fù)責(zé)處理客戶端請求,并將servlet的響應(yīng)傳送給客戶,而servlet是一種運(yùn)行在Java語言的服務(wù)器上的組件,servlet最常見的用途是擴(kuò)展Java web服務(wù)器功能,提供非常安全的易于使用cgi替代品。

Servlet工作流程:

servlet程序是Web服務(wù)器調(diào)用的,當(dāng)Web服務(wù)器收到客戶端的Servlet訪問請求后,將執(zhí)行以下幾個(gè)過程:
①Web服務(wù)器首先檢查是否已經(jīng)裝載并創(chuàng)建了該Servlet的實(shí)例對象。如果是,則直接執(zhí)行第④步;否則,將執(zhí)行第②步;
②裝載并創(chuàng)建該servlet的一個(gè)實(shí)例對象;
③調(diào)用Servlet實(shí)例;
④創(chuàng)建一個(gè)用于封裝HTTP請求的HttpServletRequest對象和一個(gè)代表HTTP響應(yīng)消息的HttpServletResponse對象,然后調(diào)用Servlet的service()方法并將請求和響應(yīng)對象作為參數(shù)傳遞進(jìn)去;
⑤WEB應(yīng)用程序被停止或重新啟動(dòng)之前,Servlet引擎將卸載Servlet,并在卸載之前調(diào)用Servlet的destroy()方法;

2.Tomcat處理數(shù)據(jù)的流程

如圖:
淺談Tomcat服務(wù)器安裝及優(yōu)化

①客戶端通過瀏覽器發(fā)送請求數(shù)據(jù);
②Tomcat收到客戶端的請求數(shù)據(jù),由servlet容器處理并進(jìn)行解析,并且把客戶端的數(shù)據(jù)請求request改為servlet request交給后端的servlet實(shí)例;
③servlet實(shí)例收到客戶端的請求數(shù)據(jù)的請求對象,進(jìn)行處理客戶端的請求,處理完成后將數(shù)據(jù)響應(yīng)給servlet容器,響應(yīng)給servlet容器叫做servlet response;
④servlet容器將收到的響應(yīng)數(shù)據(jù)交給客戶端;

Servlet容器與Servlet實(shí)例進(jìn)行通信時(shí)需要使用Java servlet api接口,而這個(gè)接口是由開發(fā)人員在寫代碼的時(shí)候定義或編寫的。

3.Servlet與JSP

jsp作為Servlet技術(shù)的擴(kuò)展,經(jīng)常會(huì)有人將兩者搞混,下面簡單介紹一下:

Servlet與JSP的區(qū)別:

Servlet在Java代碼中可以通過HttpServletResponse對象動(dòng)態(tài)輸出HTML內(nèi)容;

JSP在靜態(tài)HTML內(nèi)容中嵌入Java代碼,然后Java代碼在被動(dòng)態(tài)執(zhí)行后生成HTML頁面;

Servlet與JSP各自的特點(diǎn):

Servlet雖然能很好地組織業(yè)務(wù)邏輯代碼,但在Java源文件中,因?yàn)槭峭ㄟ^字符串拼接的方式生成HTML內(nèi)容,這樣就很容易導(dǎo)致代碼維護(hù)困難、可讀性較差;

JSP雖然避開了Servlet在生成HTML內(nèi)容方面的劣勢,但是在HTML中混入大量、復(fù)雜得業(yè)務(wù)邏輯;

4.Tomcat的特點(diǎn)

運(yùn)行時(shí)占用的資源小,擴(kuò)展性強(qiáng),支持負(fù)載均衡和郵件服務(wù)器等開發(fā)應(yīng)用系統(tǒng)常用的功能。

三、安裝Tomcat

下載Tomcat所需軟件

安裝Tomcat需要系統(tǒng)Java環(huán)境1.8版本以上,Centos 7默認(rèn)就已經(jīng)支持Java環(huán)境1.8版本,由于現(xiàn)在大部分使用還是Centos 6的系統(tǒng),,由于本人采用的Centos 7系統(tǒng),所以首先需要卸載JDK環(huán)境。

[root@localhost ~]#  rpm -qa | grep jdk             //查詢本機(jī)默認(rèn)JDK環(huán)境
java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
copy-jdk-configs-3.3-2.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64
java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64
java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
[root@localhost ~]# rpm -e java-1.8.0-openjdk-headless --nodeps
[root@localhost ~]# rpm -e java-1.7.0-openjdk-headless --nodeps 
//將原本的jdk-headless包卸載
[root@localhost ~]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local                //將提供的JDK軟件包進(jìn)行解壓
[root@localhost ~]# vim /etc/profile                //編寫系統(tǒng)環(huán)境變量,在末尾添加以下內(nèi)容
        export JAVA_HOME=/usr/local/jdk1.8.0_211                     //指定Java安裝路徑
        export JRE_HOME=/usr/local/jdk1.8.0_211/jre                  //Java運(yùn)行環(huán)境
        export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar              //聲明Java中的類,類就是一類事務(wù)的屬性
        export PATH=$JAVA_HOME/bin/:$JRE_HOME/bin/:$PATH             //將定義的變量添加到系統(tǒng)環(huán)境變量中
[root@localhost ~]# source /etc/profile                    //重新加載系統(tǒng)環(huán)境變量文件
[root@localhost ~]# java -version                           //查詢支持的Java版本信息
java version "1.8.0_211"                              //符合要求
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
[root@localhost ~]# tar zxf apache-tomcat-8.5.35.tar.gz                   
[root@localhost ~]# mv apache-tomcat-8.5.35 /usr/local/tomcat                       //將tomcat軟件包解壓,并移動(dòng)到相應(yīng)的位置
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh                  //啟動(dòng)Tomcat服務(wù)
[root@localhost ~]# netstat -anpt | grep 8080                   //可以看出Tomcat的訪問端口是8080
tcp6       0      0 :::8080                 :::*                    LISTEN      2186/java  
也可以使用另一種方法,編寫好的控制tomcat的腳本在網(wǎng)盤鏈接中。
[root@localhost ~]# mv tomcat /etc/init.d/
[root@localhost ~]# chmod +x /etc/init.d/tomcat 
[root@localhost ~]# /etc/init.d/tomcat start                    //這樣也是可以的

客戶端訪問測試:
淺談Tomcat服務(wù)器安裝及優(yōu)化

Tomcat服務(wù)安裝目錄中的目錄介紹:
淺談Tomcat服務(wù)器安裝及優(yōu)化

  • bin: 存放Tomcat服務(wù)有關(guān)的命令和腳本文件;
  • conf:存放Tomcat服務(wù)的配置文件;
  • lib:存放Tomcat服務(wù)運(yùn)行時(shí)所需的庫文件;
  • logs:存放Tomcat服務(wù)的日志文件;
  • temp:存放Tomcat服務(wù)產(chǎn)生的臨時(shí)文件;
  • work:Tomcat的工作目錄,存放Tomcat運(yùn)行時(shí)的編譯配置文件;
  • webapps:存放Tomcat服務(wù)的網(wǎng)絡(luò)文件;

常用的配置文件:

  • Server.xml:Tomcat服務(wù)的主配置文件;
  • web.xml:實(shí)現(xiàn)主配置文件沒有定義到的功能;
  • tomcat-users.xml:用來配置管理Tomcat的用戶與權(quán)限;

四、Tomcat中server.xml 文件結(jié)構(gòu)

如圖:
淺談Tomcat服務(wù)器安裝及優(yōu)化

Server:代表整個(gè)容器,實(shí)例的頂層元素,一個(gè)配置文件中只能有一個(gè)server元素,可以包含多個(gè)service。比如:

<Server port="8005" shutdown="SHUTDOWN">
//表示關(guān)閉Tomcat,使用telnet連接8005,輸入shutdown指令

Service:提供完整jvm的獨(dú)立組件,jvm表示Java虛擬機(jī),是一個(gè)虛構(gòu)出來的虛擬機(jī),可以包含一個(gè)engine包含多個(gè)connector;

  <Service name="Catalina">
//代表接受所有tomcat接受的請求,如果是Service name="apache"則表示接受所有apache轉(zhuǎn)發(fā)過來的請求

Connector:接口定義,負(fù)責(zé)接受客戶端的請求,以及向客戶端返回響應(yīng)的結(jié)構(gòu);

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
//port:接受數(shù)據(jù)的端口;protocol:設(shè)置http協(xié)議;
//Connection Timeout:與客戶端的連接超時(shí)時(shí)間,-1代表不限制客戶端的連接時(shí)間;
//Redirectport :當(dāng)客戶端請求是https將請求轉(zhuǎn)發(fā)到8443去

Engine:處理客戶端的請求,可以包含多個(gè)hots;

    <Engine name="Catalina" defaultHost="localhost">
//name:是引擎名稱,處理客戶的請求默認(rèn)去尋找localhost

Host:定義的虛擬主機(jī),為特定的虛擬主機(jī)處理所有的客戶端請求;

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

Context:運(yùn)行在虛擬主機(jī)中的單個(gè)web應(yīng)用;

Tomcat處理http請求過程,如圖:
淺談Tomcat服務(wù)器安裝及優(yōu)化

具體過程:
①用戶點(diǎn)擊網(wǎng)頁內(nèi)容,請求被發(fā)送到本機(jī)端口8080,被在那里監(jiān)聽的Coyote HTTP/1.1 Connector獲得;
②Connector把該請求交給它所在的Service的Engine來處理,并等待Engine的回應(yīng);
③Engine獲得請求localhost/test/index.jsp,匹配所有的虛擬主機(jī)Host;
④Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因?yàn)樵揌ost被定義為該Engine的默認(rèn)主機(jī)),名為localhost的Host獲得請求/test/index.jsp,匹配它所擁有的所有的Context。Host匹配到路徑為/test的Context(如果匹配不到就把該請求交給路徑名為“ ”的Context去處理);
⑥path=“/test”的Context獲得請求/index.jsp,在它的mapping table中尋找出對應(yīng)的Servlet。Context匹配到URL PATTERN為*.jsp的Servlet,對應(yīng)于JspServlet類;
⑥構(gòu)造HttpServletRequest對象和HttpServletResponse對象,作為參數(shù)調(diào)用JspServlet的doGet()或doPost().執(zhí)行業(yè)務(wù)邏輯、數(shù)據(jù)存儲(chǔ)等程序;
⑦Context把執(zhí)行完之后的HttpServletResponse對象返回給Host;
⑧Host把HttpServletResponse對象返回給Engine;
⑨Engine把HttpServletResponse對象返回Connector;
⑩Connector把HttpServletResponse對象返回給客戶Browser;

五、多實(shí)例(一臺(tái)主機(jī)運(yùn)行多個(gè)Tomcat)

說白了,更虛擬主機(jī)差不多一個(gè)意思。方法如下:

[root@localhost ~]# cp -ra /usr/local/tomcat/ /usr/local/tomcat2
[root@localhost ~]# vim /usr/local/tomcat2/conf/server.xml 
 22 <Server port="8006" shutdown="SHUTDOWN">                 //將原本的8005改為8006
 69     <Connector port="8081" protocol="HTTP/1.1"            //將原本的808端口改為8081
 70                connectionTimeout="20000"
 71                redirectPort="8444" />                         //將原本的8443改為8444
116     <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
//將原本的8009改為8010、8443改為8444
//行首為行號(hào),修改配置文件,以免端口沖突
 [root@localhost ~]# /usr/local/tomcat2/bin/startup.sh          //啟動(dòng)第二個(gè)tomcat實(shí)例
 [root@localhost ~]# netstat -anpt | grep 8081        //通過配置文件的修改,監(jiān)聽的端口為8081
tcp6       0      0 :::8081                 :::*                    LISTEN      57572/java    

客戶端訪問測試:
淺談Tomcat服務(wù)器安裝及優(yōu)化

六、自定義目錄

說白了就是訪問指定路徑的文件。方法如下:

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml            //編輯tomcat服務(wù)主配置文件
148       <Host name="localhost"  appBase="webapps"
149             unpackWARs="true" autoDeploy="true">
150         <Context path = "/shop" docBase = "/data/project" debug = "0" reloadable  = "false" crossContext = "true">                  
151         </Context>            
//添加150行和151行即可!
//path:指出訪問的路徑;          docBase:指定文件存放的路徑;
//debug:指出debug的等級(jí)為輸出信息最少,9提供最多信息;
//reloadable:為true時(shí)當(dāng)web.xml文件有改動(dòng)時(shí)將會(huì)自動(dòng)重新加載,不許重啟服務(wù);
//crossContext:為true時(shí),表示不同的context共享一個(gè)session(會(huì)話池)
[root@localhost ~]# mkdir /data/project -p
[root@localhost ~]# echo "<h2>hello word</h2>" >> /data/project/index.jsp          //創(chuàng)建測試頁面
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh                 //重啟tomcat服務(wù)

客戶端訪問測試:
淺談Tomcat服務(wù)器安裝及優(yōu)化

Tomcat默認(rèn)禁止目錄遍歷的,測試如下:

[root@localhost ~]# mv /data/project/index.jsp /data/project/index1.jsp          
//改變默認(rèn)首頁文件名

客戶端訪問,如圖:
淺談Tomcat服務(wù)器安裝及優(yōu)化
如果需要開啟目錄遍歷功能,則需以下操作:

[root@localhost ~]# vim /usr/local/tomcat/conf/web.xml        //注意:這個(gè)文件不是tomcat主配置文件 
112             <param-value>true</param-value>               //將原本的false改為true
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh                //重新啟動(dòng)tomcat服務(wù)

客戶端訪問測試,如圖:
淺談Tomcat服務(wù)器安裝及優(yōu)化
淺談Tomcat服務(wù)器安裝及優(yōu)化

七、使用Tomcat實(shí)時(shí)監(jiān)控JVM虛擬機(jī)資源使用情況

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml                        //編輯tomcat服務(wù)主配置文件
152         <Context path="/jiankong" docBase="/data/jiankong" debug="0" reloadable="    false" crossContext="true"/>
//上面已經(jīng)解釋過了,這里就不解釋了
[root@localhost ~]#  mkdir /data/jiankong
[root@localhost ~]# vim /data/jiankong/index.jsp               //在指定目錄下編寫監(jiān)控腳本
<%
Runtime rtm = Runtime.getRuntime();
long mm = rtm.maxMemory()/1024/1024;
long tm = rtm.totalMemory()/1024/1024;
long fm = rtm.freeMemory()/1024/1024;

out.println("JVM memory detail info :<br>");
out.println("Max memory:"+mm+"MB"+"<br>");
out.println("Total memory: "+tm+"MB"+"<br>");
out.println("Free memory: "+fm+"MB"+"<br>");
out.println("Available memmory can be used is :"+(mm+fm-tm)+"MB"+"<br>");
    %>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh                  //重啟tomcat服務(wù)

訪問測試,如下:
淺談Tomcat服務(wù)器安裝及優(yōu)化

八、開啟JMX遠(yuǎn)程調(diào)試功能

[root@localhost ~]# vim /usr/local/tomcat/bin/catalina.sh        //編寫這個(gè)腳本
307CATALINA_OPTS=" $CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
308 
309 # ----- Execute The Requested Command -----------------------------------------        //填寫的內(nèi)容必須在這行上面
//port:監(jiān)聽的端口;       ssl:關(guān)閉ssl安全傳輸        authenticate:開啟用戶認(rèn)證
[root@localhost ~]# cd //usr/local/jdk1.8.0_211/jre/lib/management/
[root@localhost management]# cp jmxremote.password.template jmxremote.password
[root@localhost management]# vim jmxremote.password               //定義用戶的文件并在文件末尾添加以下內(nèi)容
 64 lzj     123456                         //64為行號(hào),定義用戶為lzj,密碼為123456,使用“wq!”強(qiáng)制保存退出
[root@localhost management]# vim jmxremote.access         //定義用戶權(quán)限的文件
 77 lzj   readwrite \                    //將原本的用戶定義為剛才定義的用戶lzj
 78               create javax.management.monitor.*,javax.management.timer.* \
 79               unregister
[root@localhost management]# chmod 600 jmxremote.access 
[root@localhost management]# chmod 600 jmxremote.password     //更改這兩個(gè)配置文件的權(quán)限為600
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh           //重啟tomcat服務(wù)
[root@localhost ~]# netstat -anpt | grep 8888
tcp6       0      0 :::8888                 :::*                    LISTEN      58760/java   
//確認(rèn)剛才定義的端口8888在監(jiān)聽

由于其為圖像化界面,所以需要在桌面環(huán)境下執(zhí)行以下命令:

[root@localhost ~]# jconsole                  //調(diào)出圖形化終端

淺談Tomcat服務(wù)器安裝及優(yōu)化
淺談Tomcat服務(wù)器安裝及優(yōu)化
淺談Tomcat服務(wù)器安裝及優(yōu)化

九、配置使用https訪問tomcat服務(wù)器

[root@localhost ~]# keytool -genkey -v -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/tomcat.keystore -validity 36500
//alias:別名,這里設(shè)置為tomcat;
//keyalg:證書算法,RSA;
//validity:證書有效期,單位為天
//keystore:指定證書存放路徑,可以自定義
輸入密鑰庫口令:                   //實(shí)驗(yàn)環(huán)境,以下內(nèi)容隨意輸入
再次輸入新口令: 
您的名字與姓氏是什么?
  [Unknown]:  lv
您的組織單位名稱是什么?
  [Unknown]:  lv
您的組織名稱是什么?
  [Unknown]:  lv\
您所在的城市或區(qū)域名稱是什么?
  [Unknown]:  lv
您所在的省/市/自治區(qū)名稱是什么?
  [Unknown]:  lv
該單位的雙字母國家/地區(qū)代碼是什么?
  [Unknown]:  lv
CN=lv, OU=lv, O="lv\\", L=lv, ST=lv, C=lv是否正確?
  [否]:  y

正在為以下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期為 36,500 天):
     CN=lv, OU=lv, O="lv\\", L=lv, ST=lv, C=lv
輸入 <tomcat> 的密鑰口令
    (如果和密鑰庫口令相同, 按回車):  
再次輸入新口令: 
[正在存儲(chǔ)/usr/local/tomcat/conf/tomcat.keystore]

Warning:
JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore /usr/local/tomcat/conf/tomcat.keystore -destkeystore /usr/local/tomcat/conf/tomcat.keystore -deststoretype pkcs12" 遷移到行業(yè)標(biāo)準(zhǔn)格式 PKCS12。

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml   //內(nèi)容可以自行編寫,也可修改原本的配置,注意將其注釋去掉
 87 <Connector port="443"   protocol="org.apache.coyote.http11.Http11NioProtocol"                   //將原本的8443改為443
 88                maxThreads="150" SSLEnabled="true"
 89                 keystoreFile="/usr/local/tomcat/conf/tomcat.keystore"                   //指定證書存放路徑
 90                 keystorePass="123456">                      //指定生成證書所輸入的密碼
 91     </Connector>

[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh                  //重啟tomcat服務(wù)

客戶端訪問測試:
淺談Tomcat服務(wù)器安裝及優(yōu)化

十、開啟Manager管理頁面

在訪問Tomcat的默認(rèn)首頁界面時(shí),有一個(gè)“Manager App”,如圖:
淺談Tomcat服務(wù)器安裝及優(yōu)化
淺談Tomcat服務(wù)器安裝及優(yōu)化

接下來通過配置開啟Tomcat的manager管理頁面,方法如下:

[root@localhost ~]# vim /usr/local/tomcat/conf/tomcat-users.xml 

 45 <role rolename="manager-gui"/>
 46 <user username="lzj" password="123456" roles="manager-gui"/>        //自定義用戶名和密碼
 47 </tomcat-users>                        //注意要寫在這個(gè)閉合中
[root@localhost ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
 20          allow="192.168.1.253|192.168.1.8|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"     />
//將需要訪問的IP的地址添加到“allow=”后,以“|”進(jìn)行分隔
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh                  //重新啟動(dòng)Tomcat服務(wù)

客戶端訪問測試:
淺談Tomcat服務(wù)器安裝及優(yōu)化
淺談Tomcat服務(wù)器安裝及優(yōu)化
準(zhǔn)備war包添加到自定義的目錄中!

[root@localhost ~]# echo "hello word" >> index.jsp 
[root@localhost ~]# jar -vcf index.war index.jsp              //做成war包,并命名為index.war

在web圖形頁面進(jìn)行添加war包:
淺談Tomcat服務(wù)器安裝及優(yōu)化
淺談Tomcat服務(wù)器安裝及優(yōu)化
淺談Tomcat服務(wù)器安裝及優(yōu)化

十一、開啟host-manager管理頁面

方法跟開啟manger管理頁面差不多,方法如下:
淺談Tomcat服務(wù)器安裝及優(yōu)化
淺談Tomcat服務(wù)器安裝及優(yōu)化

修改服務(wù)器的配置文件:

[root@localhost ~]# vim /usr/local/tomcat/conf/tomcat-users.xml 
 45 <role rolename="admin-gui"/>
 46 <user username="lzj" password="123456" roles="admin-gui"/>
 47 </tomcat-users>                 //在末行的閉合標(biāo)簽中,添加以上內(nèi)容,用戶名和密碼定義
[root@localhost ~]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
 19   <Valve className="org.apache.catalina.valves.RemoteAddrValve"
 20          allow="192.168.1.253|192.168.1.8|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"     />                       //添加允許訪問的IP地址
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh                 //重啟服務(wù)

客戶端訪問測試:
淺談Tomcat服務(wù)器安裝及優(yōu)化
淺談Tomcat服務(wù)器安裝及優(yōu)化
淺談Tomcat服務(wù)器安裝及優(yōu)化

十二、分割Tomcat的運(yùn)行日志

對Tomcat進(jìn)行日志跟Apache做日志分割差不多,不過Tomcat本身并沒有日志分割工具,需要使用第三方日志分割工具——cronolog日志分割工具

操作如下:

[root@localhost ~]# tar zxf cronolog-1.6.2.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/cronolog-1.6.2/
[root@localhost cronolog-1.6.2]# ./configure && make && make install            //編譯安裝cronolog工具
[root@localhost cronolog-1.6.2]# which cronolog              //查詢到該命令的絕對路徑
/usr/local/sbin/cronolog 
[root@localhost ~]# vim /usr/local/tomcat/bin/catalina.sh 
471       org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog /usr/local/tomcat/logs/test.%Y-%m-%d.out >> /dev/null & 
//將原本的內(nèi)容修改為以上內(nèi)容
472 
473     #>> "$CATALINA_OUT" 2>&1 "&"               //將這行內(nèi)容進(jìn)行注釋
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh 
[root@localhost ~]# ll /usr/local/tomcat/logs/
總用量 380
-rw-r----- 1 root root 159033 12月  8 16:51 catalina.2019-12-08.log
-rw-r----- 1 root root 140209 12月  8 16:51 catalina.out
-rw-r----- 1 root root    162 12月  8 15:10 host-manager.2019-12-08.log
-rw-r----- 1 root root   8722 12月  8 16:51 localhost.2019-12-08.log
-rw-r----- 1 root root   6071 12月  8 15:10 localhost_access_log.2019-12-08.txt
-rw-r----- 1 root root   1719 12月  8 14:41 manager.2019-12-08.log
-rw-r----- 1 root root  18824 12月  8 16:51 test.2019-12-08.out          //確認(rèn)這個(gè)文件存在

十三、定義Tomcat 404錯(cuò)誤返回的頁面

默認(rèn)情況下,客戶端訪問Tomcat服務(wù)器上一個(gè)不存在的目錄時(shí),就會(huì)提示404錯(cuò)誤,而且會(huì)將我們Tomcat的版本信息顯示出來,這是非常危險(xiǎn)的。默認(rèn)的404返回的錯(cuò)誤頁面如下:
淺談Tomcat服務(wù)器安裝及優(yōu)化
解決的方法也很簡單,就是將404狀態(tài)碼進(jìn)行重定向,以便我們自定義返回的頁面信息,方法如下:

[root@localhost ~]# echo "Access Error ..." >> /usr/local/tomcat/webapps/ROOT/error.jsp
//自定義錯(cuò)誤頁面內(nèi)容
[root@localhost ~]# vim /usr/local/tomcat/conf/web.xml 
  22   version="3.1">                //在這行內(nèi)容的下面添加以下內(nèi)容
  23 <error-page>
  24 <error-code>404</error-code>
  25 <location>/error.jsp</location>
  26 </error-page>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh 

客戶端訪問如下:
淺談Tomcat服務(wù)器安裝及優(yōu)化

十四、Tomcat服務(wù)的內(nèi)存優(yōu)化

方法如下:

[root@localhost ~]# vim /usr/local/tomcat/bin/catalina.sh
1 #!/bin/sh                             //在第一行下面添加以下內(nèi)容
2 JAVA_OPTS="-Dfile.encoding=UTF-8
3 -server
4 -Xms1023M
5 -Xmx1024M
6 -XX:NewSize=512M
7 -XX:MaxNewSize=1020M
8 -XX:NewRatio=2
9 -XX:ParallelGCThreads=15
10 -XX:+DisableExplicitGC"
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
//重啟Tomcat服務(wù)之后,可以實(shí)時(shí)監(jiān)控JVM虛擬機(jī)資源進(jìn)行驗(yàn)證

如果使用的是Tomcat8.0之前的版本,還需添加兩個(gè)配置項(xiàng),8.0以后的版本就被移除了:

-XX:PermSize=256M
-XX:MaxPermSize=356M

配置文件中添加的各個(gè)配置項(xiàng)解釋如下:

  • -Xms:表示 JVM初始內(nèi)存大小,也可以說是Java 初始化堆的大小,-Xms 與-Xmx 設(shè)成一樣的值,避免 JVM 反復(fù)重新申請內(nèi)存,導(dǎo)致性能大起大落,默認(rèn)值為物理內(nèi)存的 1/64;
  • -Xmx:表示最大 Java 堆大小,當(dāng)應(yīng)用程序需要的內(nèi)存超出堆的最大值時(shí)虛擬機(jī)就會(huì)提示內(nèi)存溢出,并且導(dǎo)致應(yīng)用服務(wù)崩潰,因此一般建議堆的最大值設(shè)置為可用內(nèi)存的最大值的80%;
  • -Xmn:設(shè)置JVM最小內(nèi)存(128-256就夠了,一般不設(shè)置);
  • -XX:NewSize:設(shè)置新生代內(nèi)存大小。 新生代,對象新創(chuàng)建的時(shí)候分配的內(nèi)存空間,老生代在垃圾回收器回收過后該對象依然沒有被回收,該對象就會(huì)移動(dòng)到老生代;
  • -XX:PermSize:設(shè)置持久代內(nèi)存大小,用于存放靜態(tài)文件,如今Java類、方法等。持久代對垃圾回收沒有顯著影響,但是有些應(yīng) 用可能動(dòng)態(tài)生成或者調(diào)用一些class,持久帶也稱為方法區(qū),方法區(qū)存儲(chǔ)每一個(gè)java類的結(jié)構(gòu)信息:比如運(yùn)行時(shí)常量池,字段和方法數(shù)據(jù),構(gòu)造函數(shù)和普通方法的字節(jié)碼內(nèi)容以及類、實(shí)例、接口初始化時(shí)需要使用到的特殊方法等數(shù)據(jù),JDK8中已經(jīng)把持久代(PermGen Space) 干掉了,取而代之的元空間(Metaspace)。Metaspace占用的是本地內(nèi)存,不再占用虛擬機(jī)內(nèi)存;
  • -XX:MaxPermSize:設(shè)置最大值持久代內(nèi)存大小,永久代不屬于堆內(nèi)存,堆內(nèi)存只包含新生代和老年代;
  • -XX:NewRatio:改變新舊空間的比例,意思是新空間的尺寸是舊空間的1/8(默認(rèn)為8);
  • -XX:ParallelGCThreads 可用來增加并行度,需要多cpu;
  • -XX:+DisableExplicitGC:關(guān)閉System.gc(),簡單理解就是關(guān)閉java中的內(nèi)存回收機(jī)制;

十五、Tomcat線程池的優(yōu)化

方法如下:

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml  
 53   <Service name="Catalina">             //在這行內(nèi)容下添加以下內(nèi)容
 54         <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads=    "500" minSpareThread="4"/>

70     <Connector port="8080" protocol="HTTP/1.1"
71                executor="tomcatThreadPool"            //調(diào)用剛才定義的規(guī)則,需手動(dòng)添加
72                connectionTimeout="20000"
73                redirectPort="8443" />

116     <!--
117     <Connector port="8009" protocol="AJP/1.3"        redirectPort="8443" />                    //關(guān)閉AJPI接口原本存在,將其注釋即可!
118     -->

Excutor重要參數(shù)說明:

  • name:共享線程池的名字,這是connector為了共享線程池要引用的名字,該名稱必須唯一
  • namePrefix:在JVM上,每運(yùn)行線程都可以有一個(gè)name字符串,這一屬性為線程池中每個(gè)線程的name字符串設(shè)置了一個(gè)前綴,Tomcat將把線程號(hào)追加到這一前綴后面,默認(rèn)值為tomcat-exec-
  • maxThreads:該線程池可以容納的最大線程數(shù),默認(rèn)200
  • minSpareThreads:Tomcat應(yīng)該始終打開的最小不活躍線程數(shù),默認(rèn)25
    Connector參數(shù)說明:
  • executor:表示使用參數(shù)值對應(yīng)的線程池。

AJP是為Tomcat與HTTP服務(wù)器之間通信而定制的協(xié)議,能夠提供較高的通信速度與效率。如果Tomcat前端放的Apache的時(shí)候,會(huì)使用到這個(gè)AJP連接器。

十六、更改Tomcat服務(wù)的請求方式

Tomcat支持的三種請求方式:

  • BIO:阻塞式I/O操作,Tomcat7以下版本默認(rèn)情況下是以bio模式運(yùn)行的,每個(gè)請求都要?jiǎng)?chuàng)建一個(gè)線程來處理,線程開銷比較大,不適用高并發(fā)的場景,性能也最低;
  • NIO:基于緩沖區(qū),能提供非阻塞I/O操作,和傳統(tǒng)的BIO相比,具備更好的并發(fā)性能;
  • APR(Apache portable run-time libraries):簡單理解,就是從操作系統(tǒng)級(jí)別解決異步IO問題,大幅度的提高服務(wù)器的處理和相應(yīng)性能,也是Tomcat運(yùn)行高并發(fā)的首選模式;

APR提供的主要功能模塊包括:內(nèi)存分配及內(nèi)存池、原子操作、文件I/O、鎖、內(nèi)存映射、哈希表、網(wǎng)絡(luò)I/O、輪詢、進(jìn)程及線程操作等等,通過采用APR,Tomcat可以獲得高度可擴(kuò)展性以及優(yōu)越的性能,并且可以更好的與本地服務(wù)器技術(shù)集成,從而可以使Tomcat作為一款通用的Web服務(wù)器使用,而不僅僅作為輕量級(jí)應(yīng)用服務(wù)器。在這種情況下,Java將不再是一門側(cè)重于后端的編程語言,也可以更多的用于成熟的Web服務(wù)器平臺(tái)。

1.更改其請求方式為NIO(Tomcat8以上版本,默認(rèn)使用的就是NIO模式)

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml 
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"              //修改原本的protocol內(nèi)容
               executor="tomcatThreadPool"        //添加這行內(nèi)容
               connectionTimeout="20000"
               redirectPort="8443" />
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh 

查看其“catalina.out”日志,有以下字樣,則表示是在nio接收請求處理方式,如下(由于上面對Tomcat日志進(jìn)行了分割操作,所以需要查看test.2019-12-08.out日志文件):
淺談Tomcat服務(wù)器安裝及優(yōu)化

2.更該其請求方式為APR方式

啟用這種凡是稍微麻煩一些,需要安裝一些依賴(本人使用的CentOS 7.3版本)。

下載apr軟件包、apr-util軟件包

[root@localhost ~]#yum -y install apr-devel openssl-devel gcc make                   //安裝所需依賴
[root@localhost ~]# tar zxf apr-1.5.2.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/apr-1.5.2/
[root@localhost apr-1.5.2]# ./configure --prefix=/usr/local/apr && make && make install
//編譯安裝apr
[root@localhost ~]# tar zxf apr-util-1.5.4.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/apr-util-1.5.4/
[root@localhost apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
//編譯安裝apr-util
[root@localhost apr-util-1.5.4]# cd /usr/local/tomcat/bin/
[root@localhost bin]# tar zxf tomcat-native.tar.gz 
[root@localhost bin]# cd tomcat-native-1.2.18-src/native/
[root@localhost native]# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/jdk1.8.0_211 && make && make install
//編譯安裝tomcat自帶的tomcat-native軟件包
[root@localhost ~]# vim /etc/profile           //編寫環(huán)境變量,添加以下內(nèi)容
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
[root@localhost ~]# source /etc/profile
[root@localhost ~]# cd /usr/local/tomcat/
[root@localhost tomcat]# openssl genrsa -out ca.key 4096       //生成所需秘鑰
[root@localhost tomcat]# openssl req -new -x509 -days 7304 -key ca.key -out ca.crt                   
//通過所需秘鑰生成數(shù)字證書
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml          //編寫tomcat主配置文件
104     <Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"            //更改端口為443
105                maxThreads="150" SSLEnabled="true" >
106         <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />        //升級(jí)為http 2.0協(xié)議
107         <SSLHostConfig>
108             <Certificate certificateKeyFile="/usr/local/tomcat/ca.key"        //更改秘鑰存放路徑
109                          certificateFile="/usr/local/tomcat/ca.crt"               //更改證書存放路徑
110                          type="RSA" />
111         </SSLHostConfig>
112     </Connector>
[root@localhost logs]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost logs]# /usr/local/tomcat/bin/startup.sh                //重新啟動(dòng)tomcat服務(wù)
[root@localhost ~]# netstat -anpt | grep 443                       //確認(rèn)443端口在監(jiān)聽
tcp6       0      0 :::443                  :::*                    LISTEN      17206/java    

客戶端使用https協(xié)議進(jìn)行訪問,如圖:
淺談Tomcat服務(wù)器安裝及優(yōu)化

[root@localhost ~]# cat /usr/local/tomcat/logs/test.2019-12-09.out | grep apr
//根據(jù)查看tomat的日志來了解tomcat的工作模式

如圖:
淺談Tomcat服務(wù)器安裝及優(yōu)化

關(guān)于BIO模式,現(xiàn)在已經(jīng)很少使用了,所以這里就不介紹了!

———————— 本文至此結(jié)束,感謝閱讀 ————————

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI