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下載: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