Tomcat 的三種高級運行模式


Tomcat 的連接器有兩種:HTTP和AJP

AJP(Apache JServ Protocol):AJP是面向數據包的基於TCP/IP的協議,它在Apache和Tomcat的實例之間提供了一個專用的通信信道

主要有以下特征:

 1) 在快速網絡有着較好的性能表現,支持數據壓縮傳輸;

 2) 支持SSL,加密及客戶端證書;

 3) 支持Tomcat實例集群;

 4) 支持在apache和tomcat之間的連接的重用;

Tomcat Connector(連接器)有三種運行模式:bio nio apr

一、bio(blocking I/O)

即阻塞式I/O操作,表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。是基於JAVA的HTTP/1.1連接器,Tomcat7以下版本在默認情況下是以bio模式運行的。一般而言,bio模式是三種運行模式中性能最低的一種。我們可以通過Tomcat Manager來查看服務器的當前狀態。(Tomcat7 或以下,在 Linux 系統中默認使用這種方式)

一個線程處理一個請求,缺點:並發量高時,線程數較多,浪費資源

server.xml 文件中的配置

端口號自己設定,只要不占用就行,此處我的8080 已占用所以使用9090

<Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

這里寫圖片描述

Tomcat Manager查看到的

這里寫圖片描述

二、nio(new I/O)

是Java SE 1.4及后續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基於緩沖區、並能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的縮寫。它擁有比傳統I/O操作(bio)更好的並發運行性能。要讓Tomcat以nio模式來運行只需要在Tomcat安裝目錄/conf/server.xml 中將對應的中protocol的屬性值改為 org.apache.coyote.http11.Http11NioProtocol即可

利用 Java 的異步請求 IO 處理,可以通過少量的線程處理大量的請求

注意: Tomcat8 以上版本在 Linux 系統中,默認使用的就是NIO模式,不需要額外修改 ,Tomcat7必須修改Connector配置來啟動

<Connector port="9090" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />

server.xml 文件中的修改

這里寫圖片描述

Tomcat Manager查看到的

這里寫圖片描述

三、apr(Apache Portable Runtime/Apache可移植運行時) ( 安裝配置過程相對復雜)

Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態鏈接庫來處理文件讀取或網絡傳輸操作,從而大大地提高Tomcat對靜態文件的處理性能。Tomcat apr也是在Tomcat上運行高並發應用的首選模式。從操作系統級別來解決異步的IO問題

APR是使用原生C語言編寫的非堵塞I/O,利用了操作系統的網絡連接功能,速度很快。
但是需先安裝apr和native,若直接啟動就支持apr,能大幅度提升性能,不亞於魔獸開局爆高科技兵種,威力強大

Tomcat apr的配置需要以下三個組件的支持:

    APR library
    JNI wrappers for APR used by Tomcat(libtcnative)[簡單地說,就是自帶的tomcat-native]

    OpenSSL libraries

與配置nio運行模式一樣,也需要將對應Connector的protocol屬性值改為 org.apache.coyote.http11.Http11AprProtocol

server.xml 文件中的配置

<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
URIEncoding="UTF-8"
maxConnections="10000"
maxThreads="2000"
acceptCount="2000"
minSpareThreads="100"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
enableLookups="false"
disableUploadTimeout="true"
connectionTimeout="20000"
redirectPort="8443" />

配置之前首先

安裝APR以及與 Tomcat-native 整合(之前先安裝依賴)

APR及APR依賴的下載

APR下載:http://apr.apache.org/download.cgi

①安裝apr

1 在目錄/opt/apr/apr-1.5.2 下執行
 ./configure --prefix=/usr/local/apr

2 make

3 make install

② 安裝 apr-iconv

 1  /opt/apr/apr-iconv-1.2.1
   ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr

2 make

3 make install
\

③ 安裝apr-util

1 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv

2 make

3 make install

④安裝tomcat-native
這里寫圖片描述

這里寫圖片描述
這里寫圖片描述

2 ./configure --with-apr=/usr/local/apr
 make
 make install

⑤ 配置APR的環境變量

vim /opt/tomcat7/bin/catalina.sh

編輯添加如下內容

以下內容粘在開頭(表示一啟動就執行)

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib export LD_LIBRARY_PATH

⑥重啟Tomcat 查看日志
這里寫圖片描述

⑦ 粘貼便簽內配置

<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
URIEncoding="UTF-8"
maxConnections="10000"
maxThreads="2000"
acceptCount="2000"
minSpareThreads="100"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
enableLookups="false"
disableUploadTimeout="true"
connectionTimeout="20000"
redirectPort="8443" />

Tomcat Manager查看到的

這里寫圖片描述

* 待解決問題 *

Tomcat在server.xml 文件中配置 APR 協議出現以下

出現問題待解決
這里寫圖片描述

二月 08, 2017 4:53:21 下午 org.apache.catalina.core.StandardService initInternal
嚴重: Failed to initialize connector [Connector[HTTP/1.1-9000]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-9000]]
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
        at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
        at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:840)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:642)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:667)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
Caused by: org.apache.catalina.LifecycleException: The configured protocol [org.apache.coyote.http11.Http11AprProtocol] requires the APR/native library which is not available
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:972)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
        ... 12 more


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM