1. 程式人生 > >tomcat bio nio apr 模式 ---待自己整理

tomcat bio nio apr 模式 ---待自己整理

Tomcat支援三種接收請求的處理方式:BIO、NIO、APR 
1>、BIO模式:阻塞式I/O操作,表示Tomcat使用的是傳統Java I/O操作(即Java.io包及其子包)。Tomcat7以下版本預設情況下是以bio模式執行的,由於每個請求都要建立一個執行緒來處理,執行緒開銷較大,不能處理高併發的場景,在三種模式中效能也最低。啟動tomcat看到如下日誌,表示使用的是BIO模式: 
BIO模式 
2>、NIO模式:是java SE 1.4及後續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。是一個基於緩衝區、並能提供非阻塞I/O操作的Java API,它擁有比傳統I/O操作(bio)更好的併發執行效能。要讓Tomcat以nio模式來執行比較簡單,只需要在Tomcat安裝目錄/conf/server.xml檔案中將如下配置:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

修改成:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

注意:Tomcat8以上版本,預設使用的就是NIO模式,不需要額外修改 
NIO模式 
3>、apr模式:簡單理解,就是從作業系統級別解決非同步IO問題,大幅度的提高伺服器的處理和響應效能, 也是Tomcat執行高併發應用的首選模式。 
啟用這種模式稍微麻煩一些,需要安裝一些依賴庫,下面以在CentOS7 mini版環境下Tomcat-8.0.35為例,介紹安裝步聚:

APR 1.2+ development headers (libapr1-dev package)
OpenSSL 0.9.7+ development headers (libssl-dev package)
JNI headers from Java compatible JDK 1.4+
GNU development environment (gcc, make)

啟用apr模式步聚

1、安裝依賴庫

因為apr模式本質是使用JNI技術呼叫作業系統IO介面,需要用到相關API的標頭檔案

yum install apr-devel
yum install openssl-devel
yum install
gcc yum install make
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

注意:openssl庫要求在0.9.7以上版本,APR要求在1.2以上版本,用rpm -qa | grep openssl檢查本機安裝的依賴庫版本是否大於或等於apr要求的版本。

2、安裝apr動態庫

進入tomcat的bin目錄,解壓tomcat-native.tar.gz檔案,並進入tomcat-native-1.2.7-src/native目錄,執行./configure && make && make install 命令,動態庫預設安裝在/usr/local/apr/lib目錄下,如下圖所示: 
安裝成功

3、配置APR本地庫到系統共享庫搜尋路徑中

方式1:

設定LD_LIBRARY_PATH和LD_RUN_PATH環境變數,指向/usr/local/apr/lib目錄,可配置到$HOME/.profile檔案中

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib
  • 1
  • 2
  • 1
  • 2

方式2:

拷貝/usr/local/apr/lib目錄下所有動態庫到/usr/lib或/lib系統共享庫搜尋目錄下即可。

copy /usr/local/apr/lib/libtcnative* /usr/lib/
  • 1
  • 1

方式3:(推薦)

編輯$TOMCAT_HOME/bin/catalina.sh檔案,在虛擬機器啟動引數JAVA_OPTS中新增java.library.path引數,指定apr庫的路徑

JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
  • 1
  • 1

Tomcat8以下版本,需要指定執行模式,將protocol從HTTP/1.1改成org.apache.coyote.http11.Http11AprProtocol

<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

執行Tomcat後,看到如下日誌表示開啟apr模式成功: 
APR模式

如果沒有配置SSL相關引數,並且開啟了SSL,啟動時會發生org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform異常: 
未配置ssl異常
如果不想啟用SSL,將server.xml中apr模式下ssl關閉即可:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  • 1
  • 1

將SSLEngine的值從on改成off即可:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
  • 1
  • 1
Tomcat 6.x版本從6.0.32開始就預設支援apr。
Tomcat 7.x版本從7.0.30開始就預設支援apr。
因此,如果讀者使用的Tomcat版本比較陳舊的話,強烈建議升級到最新的穩定版本。

--------------------------------------------------------tomcat7整合APR(win7和linux環境下)-------------------------------------------------------

http://blog.csdn.net/zh592677127/article/details/8603490

tomcat7如果沒配置APR,啟動時會報這樣的錯誤日誌:
資訊: The APR based Apache Tomcat Native library which allows optimal performanc e in production environments was not found on the java.library.path: D:\Java\jdk 1.5.0_07\bin,提示沒找到APR的配置
先解釋一下APR,APR: Apache Portable Runtime,可看作是Apache輕便執行時,在http://tomcat.apache.org/tomcat-6.0-doc/apr.html 對APR進行了詳細介紹,說白了作用就是如何在 Tomcat中使用JNI的方式來讀取檔案以及進行網路傳輸。這個東西可以大大提升Tomcat對靜態檔案的處理效能,同時如果你使用了HTTPS方式傳輸的話,也可以提升SSL的處理效能。可以不使用Apache也能提高對靜態檔案的處理能力。
  Tomcat可以使用APR來提供超強的可伸縮性和效能,更好地整合本地伺服器技術.
  APR(Apache Portable Runtime)是一個高可移植庫,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括訪問高階IO功能(例如sendfile,epoll和OpenSSL),OS級別功能(隨機數生成,系統狀態等等),本地程序管理(共享記憶體,NT管道和UNIX sockets)。這些功能可以使Tomcat作為一個通常的前臺WEB伺服器,能更好地和其它本地web技術整合,總體上讓Java更有效率作為一個高效能web伺服器平臺而不是簡單作為後臺容器。
  在產品環境中,特別是直接使用Tomcat做WEB伺服器的時候,應該使用Tomcat Native來提高其效能。
  要測APR給tomcat帶來的好處最好的方法是在慢速網路上(模擬 Internet),將Tomcat執行緒數開到300以上的水平,然後模擬一大堆併發請求。如果不配APR,基本上300個執行緒狠快就會用滿,以後的請求就只好等待。但是配上APR之後,併發的執行緒數量明顯下降,從原來的300可能會馬上下降到只有幾十,新的請求會毫無阻塞的進來。在區域網環境測,就算是 400個併發,也是一瞬間就處理/傳輸完畢,但是在真實的Internet環境下,頁面處理時間只佔0.1%都不到,絕大部分時間都用來頁面傳輸。
  一. Windows環境:
  APR需要安裝三個元件:
     1、APR library
     2、JNI wrappers for APR used by Tomcat (libtcnative)
     3、OpenSSL libraries
  從http://tomcat.heanet.ie/native/1.1.14/binaries/win32/ ,下載tcnative-1.1.10.dll,tcnative-1.1.10.dll已經包含了上面的三個元件,所以只要把tcnative-1.1.10.dll拷貝到tomcat的bin下就行了。
  然後啟動tomcat,啟動後的資訊為:資訊: Loaded APR based Apache Tomcat Native library 1.1.14. 2009-12-24 14:17:59 org.apache.catalina.core.AprLifecycleListener init 資訊: APR capabilities: IPv6 [false], sendfile [true], accept filters [false], r andom [true]. 2009-12-24 14:18:00 org.apache.coyote.http11.Http11AprProtocol init 這說明APR配置成功,已經啟用。
  windows中還有一種方式是:
    1.將 tcnative-1.1.10.dll 放於tomcat的同級目錄 APR/lib 下;
    2. 修改一下 catalina.bat,加上set CATALINA_OPTS="-Djava.library.path=../../APR/lib"
  還有就是直接將 tcnative-1.1.10.dll加到系統變數PATH裡面,也可以放在 windows/system32 下面。
  二. Linux環境:
  (1).安裝APR
  APR需要三個元件:
    1.apr-1.3.9.tar.gz
    2.apr-util-1.3.9.tar.gz
    3.tomcat-native.tar.gz
  從 http://apr.apache.org/download.cgi 上可下載apr-1.3.9.tar.gz和apr-util-1.3.9.tar.gz,tomcat中自帶 tomcat-native.tar.gz ,
  將 apr-1.3.9.tar.gz和 apr-util-1.3.9.tar.gz 上傳到/usr/local/目錄,
  # wget   http://apache.freelamp.com/apr/apr-1.3.9.tar.gz
  #apr-1.3.9.tar.gz
  #tar zxvf apr-1.3.9.tar.gz
  #cd apr-1.3.9
  #./configure
  #make
  #make install
  執行完後,會有提示資訊:
  Libraries have been installed in:
    /usr/local/apr/lib
  If you ever happen to want to link against installed libraries
  in a given directory, LIBDIR, you must either use libtool, and
  specify the full pathname of the library, or use the `-LLIBDIR'
  flag during linking and do at least one of the following:
    - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
      during execution
    - add LIBDIR to the `LD_RUN_PATH' environment variable
      during linking
    - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
    - have your system administrator add LIBDIR to `/etc/ld.so.conf'
  See any operating system documentation about shared libraries for
  more information, such as the ld(1) and ld.so(8) manual pages.
  會在/local生成apr目錄, apr-1.3.9 的庫安裝在/usr/local/apr/lib目錄。
  # wget   http://apache.freelamp.com/apr/apr -util -1.3.9.tar.gz
  #apr-util-1.3.9.tar.gz
  #tar zxvf apr-util-1.3.9.tar.gz
  #cd apr-util-1.3.9
  #./configure --with-apr=/usr/local/apr    //配置指向apr-1.3.9的安裝目錄
  #make
  #make install
  command執行完後,提示資訊和 apr-1.3.9的資訊相同,表示apr-util-1.3.9 的庫也安裝在/usr/local/apr/lib目錄。
  安裝 tomcat-native元件
  #cd /usr/local/tomcat6/bin
  #tar zxvf tomcat-native.tar.gz
  #cd tomcat-native-1.1.16-src/jni/native
  # . /configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.5.0_20
  #make
  #make install
  command執行完的提示資訊和安裝  apr-1.3.9 的提示相同,表示 tomcat-native 的庫 也是安裝在 /usr/local/apr/lib目錄。
  (2)設定 Tomcat 整合 APR
  有兩種方法:
  1.修改 tomcat 的啟動 shell ( catalina.sh ),在該檔案中加入啟動引數: CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
  2.也可以在環境變數中配置/etc/profile中加入
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr /lib
       vi  /etc/profile 
      # 後面新增以下內容
       export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/ local /apr/lib
      # 使profile生效,  
       source  /etc/profile
  (3).判斷安裝成功:
  啟動tomcat,看日誌
  #bin/startup.sh 
  #head  logs/catalina.out
  如果看到下面的啟動日誌,表示成功。
  2009-12-24 17:34:32 org.apache.coyote.http11.Http11AprProtocol init