1. 程式人生 > >Tomcat Connector的三種執行模式【bio、nio、apr】

Tomcat Connector的三種執行模式【bio、nio、apr】

Tomcat Connector(Tomcat聯結器)有bio、nio、apr三種執行模式

bio

bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。
預設的模式,效能最差,沒有經過任何優化處理和支援。

nio

nio(non-blocking I/O),Java SE 1.4及後續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基於緩衝區、並能提供非阻塞I/O操作的Java API。擁有比傳統I/O操作(bio)更好的併發執行效能。
要讓Tomcat以nio模式來執行,修改配置檔案:tomcat/conf/server.xml

vim tomcat/conf/server.xml
修改以下內容:

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

修改protocol的值為org.apache.coyote.http11.Http11NioProtocol

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

這裡寫圖片描述

重啟Tomcat後生效。

apr

apr(Apache Portable Runtime/Apache可移植執行時庫),Tomcat將以JNI的形式呼叫Apache HTTP伺服器的核心動態連結庫來處理檔案讀取或網路傳輸操作,從而大大地提高Tomcat對靜態檔案的處理效能。從作業系統級別來解決非同步的IO問題,大幅度的提高效能。 Tomcat apr也是在Tomcat上執行高併發應用的首選模式。

要讓Tomcat以apr模式來執行,必須安裝apr和native

  • 安裝apr:
    yum -y install apr apr-devel

  • 安裝native:

    cd /usr/local/tomcat/bin/
    tar xzfv tomcat-native.tar.gz
    cd tomcat-native-1.1.33-src/jni/native/
    ./configure --with-apr=/usr/bin/apr-1-config
    make && make install

    【需要安裝gcc: yum -y install gcc】

    安裝完成之出現如下提示資訊:
    這裡寫圖片描述

  • 整合Tomcat apr

    • 設定環境變數
      方法一:在/bin/catalina.sh中增加1行:
      (在echo “Using CATALINA_BASE: $CATALINA_BASE”的上一行新增)
      CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
      這裡寫圖片描述
      方法二:在/etc/profile中加入:
      export CATALINA_OPTS=-Djava.library.path=/usr/local/apr/lib
      使配置生效:
      source /etc/profile

    • 修改配置檔案:tomcat/conf/server.xml

      vim tomcat/conf/server.xml
      修改以下內容:

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

      修改protocol的值為org.apache.coyote.http11.Http11NioProtocol

      <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
                      connectionTimeout="20000"
                      redirectPort="8443" />
  • 重啟Tomcat,啟動日誌出現以下內容證明此時以APR模式啟動
    這裡寫圖片描述

檢視Tomcat Connector執行模式

  • 方法二:根據Tomcat啟動日誌資訊判斷

    • bio

      INFO: Initializing ProtocolHandler ["http-bio-8080"]
      Aug 04, 2015 10:20:35 PM org.apache.coyote.AbstractProtocol init
    • nio

      INFO: Initializing ProtocolHandler ["http-nio-8080"]
      Aug 04, 2015 10:27:58 PM org.apache.coyote.AbstractProtocol init
    • apr

      INFO: Initializing ProtocolHandler ["http-apr-8080"]
      Aug 04, 2015 10:33:45 PM org.apache.coyote.AbstractProtocol init