tomcat中一共有三種運行模式,分別是:bio,nio,apr
bio是阻塞式IO操作,使用的是傳統的java i/o處理方式,對於每一個請求都要創建一個線程來進行處理,所以開銷較大不適合處理高並發的場景
nio是基於java中非阻塞IO操作的API實現,比傳統的i/o處理方式有更高的並發運行性能,啟動時可以看到:
apr是從操作系統級別解決異步IO問題,大幅度提高服務器的並發處理性能,也是Tomcat生產環境運行的首選方式
目前Tomcat 8.x默認情況下全部是運行在nio模式下,而apr的本質就是使用jni技術調用操作系統底層的IO接口,所以需要提前安裝所需要的依賴,首先是需要安裝openssl和apr,命令如下:
yum -y install openssl-devel yum -y install apr-devel
安裝之后,去tomcat官網下載native組件,native可以看成是tomcat和apr交互的中間環節,下載地址是:http://tomcat.apache.org/download-native.cgi 這里下載最新的版本1.2.10
解壓之后上傳至服務器執行解壓並安裝:
tar -xvzf tomcat-native-1.2.10-src.tar.gz cd tomcat-native-1.2.10-src/native/ ./configure
如果執行./configure的時候出現下面的錯誤:
這種錯誤說明native需要openssl版本大於1.0.2 而目前系統版本是1.0.1e,所以需要更新版本,而yum源最新的openssl也就到1.0.1e版本,所以現在必須手動去openssl官網下載安裝包進行編譯安裝,編譯時編譯到自定義目錄和系統的openssl並存而且互不干擾,因為系統的openssl可能被一些軟件所使用,這樣一般安裝在/usr/local/下便於管理
openssl官網:https://www.openssl.org/
下載地址是:https://www.openssl.org/source/ ,這里下載最新版本的1.1.0e
下載之后執行如下命令安裝:
tar -xvzf openssl-1.1.0e.tar.gz cd openssl-1.1.0e/ ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl make && make install
稍等一會就安裝成功了,現在再次進入native剛才編譯的目錄下,重新執行如下命令安裝:
./configure --with-ssl=/usr/local/openssl make && make install
其中編譯指定--with-ssl為剛才新安裝的目錄,否則會自動尋找系統目錄;安裝成功之后,默認位置是在:/usr/local/apr
然后進入tomcat安裝目錄,編輯配置文件:conf/server.xml
如圖所示,將默認的protocol="HTTP/1.1"修改為protocol="org.apache.coyote.http11.Http11AprProtocol"
修改完成保存並退出,然后有以下兩種方法來引入apr:
方法1:配置tomcat安裝目錄下:bin/catalina.sh文件引入apr,推薦這種方式:
如圖所示在原有變量JAVA_OPTS后面追加對應的配置即可,添加一行新的就可以:JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
然后保存並退出
方法2:在環境變量中加入apr的目錄,讓tomcat可以使用系統變量搜索到,編輯/etc/profile在最后添加如下兩行內容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib
保存之后,執行 source /etc/profile 使配置生效
以上兩種方法都是可以的,配置完成之后,重啟一下tomcat,然后查看日志logs/catalina.out可以看到http已經以apr模式啟動了