Tomcat

1,Tomcat介紹

Tomcat是apache軟件基金會項目中的一個核心項目,有apache和sun其他一些公司及個人共同開發而成的。
Tomcat服務器是一個免費的開源的web應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不多的場合下被普遍使用,是開發和調試jsp程序的首選。
可以這樣認爲,當一臺服務器配置好apache服務器以後,可以利用apache服務器來響應我們的html頁面的訪問請求,而tomcat是apache服務器的擴展,當你運行tomcat的時候實際上是作爲一個apache獨立的進程單獨運行的,apache服務器爲html頁面提供服務的,而tomcat是運行jsp頁面和servlet,另外tomcat也能具有處理html頁面的功能,但是處理靜態的能力沒有apache處理好。

jsp:java服務器頁面,是一個簡化的servlet設計,在傳統的html頁面裏面增加了java代碼; jsp=“html+java代碼+jsp標籤”

2,tomcat組件

servlet(應用程序或者容器)是java提供的用於開發web服務器應用程序的一個組件,運行在服務器端,有servlet用於生成動態頁面內容,servlet是平臺讀立的java類,編寫一個servlet,實際上就是安裝servlet規範編寫一個java類。
2.1,什麼是servlet?
tomcat處理請求和響應的過程是由servlet的程序來完成的,並且servlet是爲解決實現動態頁面而衍生的東西,與我們之前瞭解的lnmp環境想要實現動態頁面需要和php服務器溝通的過程差不多,可以把servlet比作成php
Tomcat
tomcat是web應用服務器,是一個servlet/jsp容器,tomcat作爲servlet容器,負責處理客戶請求,並將servlet的響應傳送給客戶,而servlet是一種運行在java語言的服務器上的組件,servlet最常見的用途是擴展java web服務器功能,提供非常安全的,可移植的(打包網頁代碼就可以在另外一個環境中與運行,如果linux環境跟windows環境),易於使用cgi替代品。
2.2,tomcat處理數據的流程
Tomcat
1)客戶端通過瀏覽器發送請求數據
2)tomcat收到服務器的請求數據,由servlet容器處理並進行解析,並且把客戶端的數據請求request改變成servlet request交給後端的servlet實例,實例收到客戶端的請求數據的請求對象後,進行處理客戶端的請求,處理完成後將數據響應給servlet容器,響應給servlet容器(servlet response)。
3)servlet收到實例的響應數據後交給客戶端。
servlet容器與servlet實例需要通過java servlet api接口進行通信,api接口是由開發人員在寫代碼的時候定義或者編寫。
2.3,servlet和jsp的區別
1)Servlet在Java代碼中可以通過HttpServletResponse對象動態輸出HTML內容。
2)JSP是在靜態HTML內容中嵌入Java代碼,然後Java代碼在被動態執行後生成HTML內容。

3,tomcat的特點

運行時佔用的資源小,擴展性好,支持負載均衡和郵件服務器等開發應用系統常用的功能。

4,安裝tomcat

在安裝tomcat之前必須先安裝JDK,JDK是sun公司免費提供的java語言的軟件開發工具包,其中包含java虛擬機(JVM),編寫好的java源程序經過編譯可形成java字節碼,只要安裝了JDK,就可以利用JVM解釋這些字節碼文件,從而保證了java的平臺性。
jdk下載地址:https://www.oracle.com/java/technologies/javase-downloads.html
1)安裝JDK,配置java環境

#查看系統中是否有老版本的java環境,如果有則卸載掉:
[root@tomcat ~]# rpm -qa | grep java
[root@tomcat ~]# rpm -e java-1.7.0-openjdk-headless --nodeps 
[root@tomcat ~]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local/
[root@tomcat ~]# vim /etc/profile
添加以下內容:
//指定java路徑
export  JAVA_HOME=/usr/local/jdk1.8.0_211    
//指定java運行環境
export  JRE_HOME=/usr/local/jdk1.8.0_211/jre 
//聲明java中的類
export  CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar 
export  PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
[root@tomcat ~]# source /etc/profile
[root@tomcat ~]# 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)

2)安裝tomcat
官網下載地址:https://tomcat.apache.org

[root@tomcat ~]# tar zxf apache-tomcat-8.5.35.tar.gz 
[root@tomcat ~]# mv apache-tomcat-8.5.35 /usr/local/tomcat8

Tomcat
Tomcat目錄說明:
bin:存放windows或linux平臺上或者關閉tomcat的腳本文件;
conf:存放tomcat服務器的全局配置文件,其中最重要的是server.xml和web.xml;
lib:tomcat運行需要的庫文件(jars);
logs:tomcat運行時產生的日誌文件;
temp:臨時文件存放目錄;
work:tomcat的工作目錄,存放tomcat運行時的編譯配置文件;
Webapps:tomcat的主要Web發佈目錄,默認情況下把Web應用文件放於此目錄;

Tomcat常用配置文件說明:
Tomcat
server.xml:tomcat的主配置文件,可以設置端口號,設置域名或者ip;
web.xml:缺省的web app配置(也可以理解爲是實現主配置文件沒有定義到的功能:如果目錄遍歷,定義錯誤頁面類型);
tomcat-user.xml:用來配置管理tomcat的用戶與權限;

#運行tomcat(默認端口號8080)

[root@tomcat ~]# /usr/local/tomcat8/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_211/jre
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat ~]# ss -anput | grep 8080
tcp    LISTEN     0      100      :::8080                 :::*                   users:(("java",pid=16505,fd=49))
#設置防火牆規則:
[root@tomcat ~]# firewall-cmd --add-port=8080/tcp --permanent
success
[root@tomcat ~]# firewall-cmd --reload
success

瀏覽器測試訪問網頁:
Tomcat

4,tomcat 應用

1, tomcat 中server.xml文件結構詳解
Tomcat
server字段:代表整個容器,實例的頂層元素,一個配置文件中只能有一個server元素,可以包含多個service;

<Server port="8005" shutdown="SHUTDOWN">
#表示通過遠程連接8005端口,輸入“SHUTDOWN”,能夠實現遠程關閉tomcat服務。

service字段:提供完整jvm的獨立組件,java:java虛擬機,是一個虛構出來的虛擬機,可以包含一個engine,包含多個connector。

  <Service name="Catalina">
    #表示處理所有tomcat接受的請求,例如修改爲“apache”,表示處理所有apache轉發過來的請求

connector:接口定義,負責接收客戶端的請求,以及向客戶端返回響應結果;

        <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
//port:接收數據端口
//protocol:設置http協議
//connection Timeout:與客戶端的連接超時時間,“-1”代表不限制客戶端的連接時間
//redirectPort:當客戶端請求是https,則將請求轉發到8443去。

Engine:處理客戶端的請求,可以包含多個host;

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

Host:定義的虛擬主機,爲特定的虛擬主機處理所有的客戶端請求;

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

Context:運行在虛擬主機中的單個web應用;

通過上面各字段的含義,接下來了解Tomcat處理http請求過程:
Tomcat
1)請求被髮送到tomcat的8080端口,被connector獲得;
2)connector把該請求交給他所在的service的engine來處理,等待engine的處理結果;
3)engine匹配到名爲localhost的host請求交給host;
4)host匹配到路徑爲(例如/web)的context;
5)context匹配到index.jsp頁面,將結果返回給host;
6)host把servlet reponse對象返回給engine;
7)engine將servlet返回給conenctor;
8)connector返回給客戶端;

2,tomcat 多實例配置

[root@tomcat ~]# cp -ra /usr/local/tomcat8/ /usr/local/tomcat8_2 #同時複製源目錄或文件的屬性和相關的鏈接
#修改tomcat主配文件
[root@tomcat ~]# vim /usr/local/tomcat8_2/conf/server.xml 
修改以下內容:
 22 <Server port="8006" shutdown="SHUTDOWN">  
 69     <Connector port="8081" protocol="HTTP/1.1"  
 70                connectionTimeout="20000"
 71                redirectPort="8444" />
116     <Connector port="80010" protocol="AJP/1.3" redirectPort="8443" />

#啓動tomcat新實例:

[root@tomcat ~]# /usr/local/tomcat8_2/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat8_2
Using CATALINA_HOME:   /usr/local/tomcat8_2
Using CATALINA_TMPDIR: /usr/local/tomcat8_2/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_211/jre
Using CLASSPATH:       /usr/local/tomcat8_2/bin/bootstrap.jar:/usr/local/tomcat8_2/bin/tomcat-juli.jar
Tomcat started.

[root@tomcat ~]# ss -anput | grep 8081
tcp    LISTEN     0      100      :::8081                 :::*                   users:(("java",pid=16646,fd=49))
#設置防火牆:
[root@tomcat ~]# firewall-cmd --add-port=8081/tcp --permanent
success
[root@tomcat ~]# firewall-cmd --reload
success

#瀏覽器訪問,url:http://172.16.1.100:8081/
Tomcat

3,自定義目錄

[root@tomcat ~]# vim /usr/local/tomcat8/conf/server.xml 
#在Host處添加Context配置項:
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
                <Context path = "/test" docBase="/data/project" debug="0" reloadable="true" crossContext="true">
</Context>
//path: 指定訪問的路徑
//docBase:指定網頁存放的路徑
//reloadable:爲true時,當web.xml文件有改動的時候自動重新加載,不用重啓服務
//crossContext:爲true時,表示不同的context共享一個session(會話池)
#創建自定義目錄並存放動態文件:
[root@tomcat ~]# mkdir -p /data/project
[root@tomcat ~]# cd /data/project/
[root@tomcat project]# vim index.jsp
<h1>welcome to tomcat!!</h1>
#重啓tomcat
[root@tomcat ~]# /usr/local/tomcat8/bin/shutdown.sh 
[root@tomcat ~]# /usr/local/tomcat8/bin/startup.sh 

瀏覽器訪問,url:http://172.16.1.100:8080/test/
Tomcat

4,自定義監控頁面

[root@tomcat ~]# mkdir /monitoring
[root@tomcat ~]# vim /monitoring/test.jsp
<%
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>");
%>

#在tomcat主配文件中添加自定義路徑

添加以下內容:
                <Context path = "/monitoring" docBase="/monitoring" debug="0" reloadable="true" crossContext="true">
</Context>

#重啓tomcat,瀏覽器進行測試:

[root@tomcat ~]# /usr/local/tomcat8/bin/shutdown.sh 
[root@tomcat ~]# /usr/local/tomcat8/bin/startup.sh 

Tomcat

5,JMX遠程監控
#開啓JMX遠程調試功能:
[root@tomcat ~]# vim /usr/local/tomcat8/bin/catalina.sh
Tomcat

CATALINA_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"
//port:連接的端口號,一定不能與其他端口衝突
//ssl:關閉ssl安全傳輸
//authenticate:開啓用戶認證

#配置用戶認證

[root@tomcat ~]# cd /usr/local/jdk1.8.0_211/jre/lib/management/
[root@tomcat management]# cp jmxremote.password.template jmxremote.password
#設置用戶名和密碼
[root@tomcat management]# vim jmxremote.password
#在最後添加用戶名和密碼:
tomcat_test pwd@123
:wq!  //強制保存退出

#授權:

[root@tomcat management]# vim jmxremote.access
monitorRole   readonly
tomcat_test   readwrite \    //將原來的用戶替換爲tomcat-test
              create javax.management.monitor.*,javax.management.timer.* \
              unregister
#設置權限,並重啓tomcat
[root@tomcat management]# chmod 600 jmxremote.password jmxremote.access 
[root@tomcat management]# /usr/local/tomcat8/bin/shutdown.sh 
[root@tomcat management]# /usr/local/tomcat8/bin/startup.sh 
[root@tomcat management]# netstat -anput | grep 8888
tcp6       0      0 :::8888                 :::*                    LISTEN      5159/java      
#開放8888端口:
[root@tomcat ~]# firewall-cmd --add-port=8888/tcp --permanent
success
[root@tomcat ~]# firewall-cmd --reload
success

#直接在終端命令行中輸入jconsole:
[root@tomcat ~]# jconsole
Tomcat
Tomcat
登錄成功後,可以針對特定的日期進行監控,監控項有內存,線程,類,和cpu。

6,啓動tomcat管理後臺

1)允許遠程管理後臺的主機:
[root@tomcat ~]# vim /usr/local/tomcat8/webapps/manager/META-INF/context.xml

Tomcat

2)授權管理的用戶和密碼:
[root@tomcat ~]# vim /usr/local/tomcat8/conf/tomcat-users.xml
添加以下內容:
 37         <role rolename="manager-gui"/>
 38         <user username="tomcat_manager" password="pwd@123" roles="manager-gui"/>
 #角色爲manager-gui,用戶名爲tomcat_manager,密碼爲pwd@123

role解釋:

 manager-gui:允許訪問html接口(即URL路徑爲/manager/html/*)
 manager-script:允許訪問純文本接口(即URL路徑爲/manager/text/*)
 manager-jmx:允許訪問JMX代理接口(即URL路徑爲/manager/jmxproxy/*)
 manager_status:允許訪問tomcat只讀狀態頁面(即URL路徑爲/manager/status/*)
#重啓tomcat
[root@tomcat ~]# shutdown.sh 
[root@tomcat ~]# startup.sh 

瀏覽器訪問,url:http://172.16.1.100:8080/
Tomcat
Tomcat
tomcat後臺登陸成功。

7,tomcat後臺部署
1)創建測試war包(這裏選擇自定義war包)

[root@tomcat ~]# cat index.jsp 
<h1>welcome to tomcat-manager</h1>
[root@tomcat ~]# jar cf test.war index.jsp    #打包成war包

2)登陸tomcat後臺進行部署
Tomcat
Tomcat

3)用戶通過瀏覽器進行訪問,url:http://172.16.1.100:8080/test-manager/
Tomcat

#方法二:
Tomcat
Tomcat
瀏覽器測試訪問:
Tomcat

8,tomcat日誌切割(cronolog)
cronolog官網最近訪問不了,所以我上傳至網盤:https://pan.baidu.com/s/1SNNWLOB70M5V0dvVW4WF-Q
提取碼:valo

#安裝cronolog
[root@tomcat ~]# tar zxf cronolog-1.6.2.tar.gz 
[root@tomcat ~]# cd cronolog-1.6.2/
[root@tomcat cronolog-1.6.2]# ./configure && make && make install

#修改catalina.sh腳本文件:

[root@tomcat ~]# vim /usr/local/tomcat8/bin/catalina.sh 
447   #touch "$CATALINA_OUT"   #將其註釋
471       org.apache.catalina.startup.Bootstrap "$@" start \
472         2>&1 | /usr/local/sbin/cronolog /usr/local/tomcat8/logs/catalina.%Y%m%d.out >> /dev/null &   #添加該內容項
473       #>> "$CATALINA_OUT" 2>&1 "&"  #將其註釋
#重啓tomcat
[root@tomcat ~]# shutdown.sh 
[root@tomcat ~]# startup.sh 

#查看切割後的日誌文件:
Tomcat

9,自定義錯誤頁面

[root@tomcat ~]# cd /usr/local/tomcat8/webapps/ROOT/
[root@tomcat ROOT]# vim error.jsp
<h1>ERROR,check you tomcat</h1>
[root@tomcat ROOT]# vim  ../../conf/web.xml 
在末尾添加以下字段
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>

#重啓tomcat,網頁測試
Tomcat

10,tomcat優化

1)內存優化
優化內存,主要是在bin/catalina.bat/sh 配置中進行。

[root@tomcat ~]# vim /usr/local/tomcat8/bin/catalina.sh 
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"

重啓tomcat生效。
參數解釋:

-Dfile.encoding:默認文件編碼;
-server:表示這是應用於服務器的配置,JVM內部會有特殊處理的;
-Xmx1024m:設置JVM最大可用內存的1024MB;
-Xms1024m:設置JVM最小內存爲1024m,此值可用設置與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配內存;
-XX:NewSize:設置年輕代大小;
-XX:MaxNewSize:設置最大的年輕代大小;
-XX:PermSize:設置永久代大小;
-XX:MaxPermSize:設置最大永久代大小;
-XX:NewRatio=4:設置年輕代(包括 Eden 和兩個 Survivor 區)與終身代的比值(除去永久代),
設置爲 4,則年輕代與終身代所佔比值爲 1:4,年輕代佔整個堆棧的 1/5;
-XX:MaxTenuringThreshold=10:設置垃圾最大年齡,默認爲:15;
如果設置爲 0 的話,則年輕代對象不經過 Survivor 區,直接進入年老代。對於年老代比較多的應用,可以提高效率。
如果將此值設置爲一個較大值,則年輕代對象會在 Survivor 區進行多次複製,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概率;
-XX:+DisableExplicitGC:這個將會忽略手動調用 GC 的代碼使得System.gc() 的調用就會變成一個空調用,完全不會觸發任何 GC;

一般來說,應該使用武力內存的80%最爲堆大小。
說明:以上兩個參數(-Xmx、-Xms)關係到tomcat承受的訪問性能,但也要根據服務器實際內存情況設定。一般建議Xms和Xmx的值取成一樣比較好,可以加快內存回收速度。

2)線程優化
線程優化,主要修改conf/server.xml文件

[root@tomcat ~]# vim /usr/local/tomcat8/conf/server.xml 
#打開默認被註釋的連接池配置:
 56     <!--
 57     <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
 58         maxThreads="150" minSpareThreads="4"/>
 59     -->

修改爲:

 56     <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
 57         maxThreads="500" minSpareThreads="100" prestartminSpareThreads = "true"  maxQueueSize = "100"/>

參數解釋:

  • name:共享線程池的名字,這是connector爲了共享線程池要引用的名字,改名字必須唯一;
  • namePrefix: 在JVM上,每運行線程都可以有一個name字符串,這一屬性爲線程池中每個線程的name字符串設置了一個前綴,Tomcat將把線程號追加到這一前綴後面,默認值爲tomcat-exec-;
  • maxThreads="X":表示最多同時處理X個連接,最大併發數,默認設置成200,一般建議在500~800,根據硬件設施和業務來判斷;
  • minSpareThreads="X" :初始化X個連接;
  • prestartminSpareThreads:在tomcat初始化的時候就初始化minSpareThreads 的參數值,如果不等於 true,minSpareThreads 的值就沒啥效果了;
  • maxQueueSize:最大的等待隊列數,超過則拒絕請求。

#修改默認的鏈接參數配置:

 67     <Connector port="8080" protocol="HTTP/1.1"
 68                connectionTimeout="20000"
 69                redirectPort="8443" />

修改爲:

 67     <Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
 68                connectionTimeout="20000" maxConnections="10000"
 69                redirectPort="8443" enableLookups="false" acceptCount="100" maxPostSize="10485760" compression="on" disableUploadTimeout="true" compressionMinSize="2048" acceptorThreadCount="2" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" URIEncoding="utf-8" />

重要參數解釋:

  • protocol:Tomcat 8 設置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol(如果這個用不了,就用下面那個)
  • protocol:Tomcat 6、7 設置 nio 更好:org.apache.coyote.http11.Http11NioProtocol;
  • acceptCount:指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,默認設置100;
  • maxPostSize:以FROM URL 參數方式的POST提交放肆,限制提交最大的大小,默認是2097152(2MB),它使用的單位是字節,10485760 爲 10M。如果要禁用限制,則可以設置爲 -1。
  • acceptorThreadCount:用於接收連接的線程的數量,默認值是1,一般這個指需要改動的時候是因爲該服務器是一個多核CPU,如果是多核CPU一般設置爲2.

    其中和最大連接相關的參數maxThreads和cceptCount。如果要加大併發連接數,應同時加大這個參數;
    web server運行的最大連接數還受制於操作系統1內核參數設置,linux通常是1000個左右。

3)tomcat連接數相關參數配置

  • enableLookups:是否反查詢域名【禁用DNS查詢】,默認值爲true,爲了提高處理能力,應配置爲false;
  • connnectionTimeout:網絡連接超時,默認值60000,單位:毫秒。配置爲0表示永不超時,這樣配置有隱患的,通常可配置爲30000毫秒;
  • maxKeepAliveRequests:
  • nginx動態的轉給tomcat,nginx是不能keepalive的,而tomcat端默認開啓了keepalive,會等待keepalive的timeout,默認不設置就是使用connectionTimeout。
  • 所以必須設置tomcat的超時時間,並關閉tomcat的keepalive,否則會產生大量tomcat的socket timewait。
    maxKeepAliveRequests="1"  //表示每個連接只響應一次就關閉,這樣就不會等待timeout了
    connectionTimeout="20000"
  • bufferSize:輸入流緩衝大小,默認值是2048 bytes;
  • compression:壓縮傳輸,取值on/off/force,默認時off;

11,tomcat connector(連接器)三種運行模式

Tomcat支持三種接收請求的方式:BIO NIO APR

  • 1)BIO:一個線程處理一個請求。缺點:併發量高時,線程數較多,浪費資源。tomcat7或以下在linux系統中默認使用這種方式。

  • 2)NIO:利用java的異步IO處理,可以通過少量的線程處理大量的請求。tomcat8在linux系統中默認使用這種方式。tocmat7必須修改connector配置來啓動(conf/server.xml配置文件),如下所示:

&lt;Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"redirectPort="8443"/&gt;

  • 3)APR(Apache Portable Runtime):從操作系統級別解決異步IO問題,大幅度的提高服務器的處理和相應的性能,也是tomca臺運行高併發的首選模式。linux如果安裝了apr和native,那麼tomcat直接啓動就支持apr。
    APR提供的主要功能模塊包括:內存分配及內存池、原子操作、文件I/O、鎖、內存映射、哈希表、網絡I/O、輪詢、進程及線程操作等等,通過採用APR,Tomcat可以獲得高度可擴展性以及優越的性能,並且可以更好的與本地服務器技術集成,從而可以使Tomcat作爲一款通用的Web服務器使用,而不僅僅作爲輕量級應用服務器。在這種情況下,Java將不再是一門側重於後端的編程語言,也可以更多的用於成熟的Web服務器平臺。

11.1,apr模式
安裝apr以及tomcat-native:
1)安裝依賴庫:

[root@tomcat ~]# yum -y install apr-devel openssl-devel
注意:openssl庫要求在0.9.7以上版本,APR要求在1.2以上版本,用rpm -qa | grep openssl檢查本機安裝的依賴庫版本是否大於或等於apr要求的版本。

2)安裝apr動態庫:

[root@tomcat ~]# cd /usr/local/tomcat8/bin/
[root@tomcat bin]# tar zxf tomcat-native.tar.gz 
[root@tomcat bin]# cd tomcat-native-1.2.18-src/native/
[root@tomcat native]# ./configure && make && make install   #動態庫默認安裝在/usr/local/apr/lib目錄下(

3)配置APR本地庫到系統共享庫搜索路徑中:

[root@tomcat ~]# vim /usr/local/tomcat8/bin/catalina.sh 
#添加以下內容
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"

4)修改運行模式:

#將protocol從HTTP/1.1改成org.apache.coyote.http11.Http11AprProtocol
[root@tomcat ~]# vim /usr/local/tomcat8/conf/server.xml 
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"

5)運行tomcat,看到如下日誌表示成功開啓apr模式:
Tomcat

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章