tomcat三種運行模式

Tomcat是一個小型的輕量級應用服務器,也是JavaEE開發人員最常用的服務器之一。不過,許多開發人員不知道的是,Tomcat Connector(Tomcat連接器)有bionioapr三種運行模式,那麼這三種運行模式有什麼區別呢,我們又如何修改Tomcat Connector的運行模式來提高Tomcat的運行性能呢?

下面,我們先大致瞭解Tomcat Connector的三種運行模式。

bio

bio(blocking I/O),顧名思義,即阻塞式I/O操作,表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。Tomcat在默認情況下,就是以bio模式運行的。遺憾的是,就一般而言,bio模式是三種運行模式中性能最低的一種。我們可以通過Tomcat Manager來查看服務器的當前狀態。【點擊這裏可以查看Tomcat Manager用戶配置的相關信息】

 

nio

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文件中將如下配置:

<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 Manager中看到當前服務器狀態頁面的HTTP協議的Connector運行模式已經從http-bio-8080變成了http-nio-8080

 

apr

apr(Apache Portable Runtime/Apache可移植運行時),是Apache HTTP服務器的支持庫。你可以簡單地理解爲,Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態鏈接庫來處理文件讀取或網絡傳輸操作,從而大大地提高Tomcat對靜態文件的處理性能。 Tomcat apr也是在Tomcat上運行高併發應用的首選模式。如果我們的Tomcat不是在apr模式下運行,在啓動Tomcat的時候,我們可以在日誌信息中看到類似如下信息:

2013-8-6 16:17:49 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: xxx/xxx(這裏是路徑信息)

Tomcat apr運行模式的配置是三種運行模式之中相對比較麻煩的一種。據官方文檔所述,Tomcat apr需要以下三個組件的支持:

  • APR library[APR庫]
  • JNI wrappers for APR used by Tomcat (libtcnative)[簡單地說,如果是在Windows操作系統上,就是一個名爲tcnative-1.dll的動態鏈接庫文件]
  • OpenSSL libraries[OpenSSL庫]

此外,與配置nio運行模式一樣,也需要將對應的Connector節點的protocol屬性值改爲org.apache.coyote.http11.Http11AprProtocol。 不過,上述繁瑣的操作都是Tomcat 7.0.30之前的版本才需要這樣配置,從Tomcat 7.0.30版本開始,Tomcat已經自帶了tcnative-1.dll等文件,並且默認就是在Tomcat apr模式下運行,因此我們只需要下載最新版本的Tomcat直接使用即可。

 

此外,即使不使用Tomcat Manager,我們也可以區分出Tomcat當前的運行模式。如果以不同的Connector模式啓動,在Tomcat的啓動日誌信息中一般會包含類似如下的不同內容,我們只需要根據這些信息即可判斷出當前Tomcat的運行模式:

bio

信息: Starting ProtocolHandler ["http-bio-8080"] 2013-8-6 16:17:50 org.apache.coyote.AbstractProtocol start

nio

信息: Starting ProtocolHandler ["http-nio-8080"] 2013-8-6 16:59:53 org.apache.coyote.AbstractProtocol start

apr

信息: Starting ProtocolHandler ["http-apr-8080"] 2013-8-6 17:03:07 org.apache.coyote.AbstractProtocol start

Tomcat 6.x版本從6.0.32開始就默認支持apr。
Tomcat 7.x版本從7.0.30開始就默認支持apr。
因此,如果讀者使用的Tomcat版本比較陳舊的話,強烈建議升級到最新的穩定版本。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章