Tomcat是一個小型的輕量級應用服務器,也是JavaEE開發人員最經常使用的服務器之一。不過,許多開發人員不知道的是,Tomcat Connector(Tomcat鏈接器)有bio、nio、apr三種運行模式,那麼這三種運行模式有什麼區別呢,咱們又如何修改Tomcat Connector的運行模式來提升Tomcat的運行性能呢?java
下面,咱們先大體瞭解Tomcat Connector的三種運行模式。python
bio(blocking I/O),顧名思義,即阻塞式I/O操做,表示Tomcat使用的是傳統的Java I/O操做(即java.io
包及其子包)。Tomcat在默認狀況下,就是以bio模式運行的。遺憾的是,就通常而言,bio模式是三種運行模式中性能最低的一種。咱們能夠經過Tomcat Manager來查看服務器的當前狀態。linux
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
文件中將以下配置:apache
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
中的protocol屬性值改成org.apache.coyote.http11.Http11NioProtocol
便可:json
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
此時,咱們就能夠在Tomcat Manager中看到當前服務器狀態頁面的HTTP協議的Connector運行模式已經從http-bio-8080
變成了http-nio-8080
。ubuntu
apr(Apache Portable Runtime/Apache可移植運行時),是Apache HTTP服務器的支持庫。你能夠簡單地理解爲,Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態連接庫來處理文件讀取或網絡傳輸操做,從而大大地提升Tomcat對靜態文件的處理性能。 Tomcat apr也是在Tomcat上運行高併發應用的首選模式。若是咱們的Tomcat不是在apr模式下運行,在啓動Tomcat的時候,咱們能夠在日誌信息中看到相似以下信息:windows
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(這裏是路徑信息)
此外,與配置nio運行模式同樣,也須要將對應的Connector
節點的protocol
屬性值改成org.apache.coyote.http11.Http11AprProtocol
。 不過,上述繁瑣的操做都是Tomcat 7.0.30以前的版本才須要這樣配置,從Tomcat 7.0.30版本開始,Tomcat已經自帶了tcnative-1.dll
等文件,而且默認就是在Tomcat apr模式下運行,所以咱們只須要下載最新版本的Tomcat直接使用便可。centos
一 windows下安裝
直接拷貝tcnative-1.dll到TOMCAT_HOME/bin目錄下,啓動便可tomcat
二 linux centos4.8或者ubuntu10.10 server安裝服務器
1. 下載包
apr-1.5.2.tar.gz
apr-iconv-1.2.1.tar.gz
apr-util-1.5.4.tar.gz
tomcat-native-1.1.34-src.tar.gz
2. tomcat 、jdk安裝(略)
3. 安裝apr
tar zxvf apr-1.5.2.tar.gz cd apr-1.5.2 ./configure --prefix=/usr/local/apr make make install
4. 安裝apr-iconv
tar -zxvf apr-iconv-1.2.1.tar.gz cd apr-iconv-1.2.1 ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr make make install
5. 安裝apr-util
tar zxvf apr-util-1.5.4.tar.gz cd apr-util-1.5.4 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv make make install
6. 安裝tomcat-native
tar zxvf tomcat-native-1.1.34-src.tar.gz cd tomcat-native-1.1.34-src/jni/native ./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.7.0_23 make make install
7. 添加環境變量
vi /etc/profile #在他文件末尾處添加下面的變量 # apr export LD_LIBRARY_PATH=/usr/local/apr/lib 執行 source /etc/profile 此時環境變量生效果
8 . 配置tomcat
將對應的Connector
節點的protocol
屬性值改成org.apache.coyote.http11.Http11AprProtoc
9. 啓動tomcat,就能夠看到以下信息,表示配置成功
ul 28, 2017 11:43:06 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent INFO: Loaded APR based Apache Tomcat Native library 1.1.34 using APR version 1.5.2. Jul 28, 2017 11:43:06 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. Jul 28, 2017 11:43:06 AM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["http-apr-8080"] Jul 28, 2017 11:43:06 AM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 965 ms