1、知識點掃盲java
什麼是APR?
Apache Portable Runtime(APR)項目的任務是建立和維護軟件庫,爲底層平臺特定的實現提供可預測且一致的接口。主要目標是提供一個API,軟件開發人員能夠對其進行編碼,並確保可預測的行爲,若是不是相同的行爲,不管其軟件構建的平臺如何,均可以減輕他們編寫特殊狀況的須要,以便解決或採起行動。平臺特定缺陷或功能的優點。c++
2、tomcat的三種模式web
Tomcat的運行模式有3種,即BIO、NIO和APR。
一、BIO(blocking I/O)
即阻塞式I/O操做,表示Tomcat使用的是傳統的Java I/O操做(即java.io包及其子包)。是基於JAVA的HTTP/1.1鏈接器,Tomcat7如下版本在默認狀況下是以bio模式運行的。通常而言,bio模式是三種運行模式中性能最低的一種。咱們能夠經過Tomcat Manager來查看服務器的當前狀態。(Tomcat7 或如下,在 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)更好的併發運行性能。利用 Java 的異步請求 IO 處理,能夠經過少許的線程處理大量的請求。
想運行在該模式下,直接修改server.xml裏的Connector節點,修改protocol爲:
protocol="org.apache.coyote.http11.Http11NioProtocol"
2.五、NIO2(new I/O2)
就是NIO模式的加強版,功能和NIO同樣,可是性能更強。
想運行在該模式下,直接修改server.xml裏的Connector節點,修改protocol爲:
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
三、APR
安裝起來最困難,可是從操做系統級別來解決異步的IO問題,大幅度的提升性能.
必需要安裝apr和native,直接啓動就支持apr。本文下面重點就是介紹怎麼安裝和啓動APR。apache
3、安裝APR前的官方要求vim
APR 1.2+ development headers (libapr1-dev package)
OpenSSL 1.0.2+ development headers (libssl-dev package)
JNI headers from Java compatible JDK 1.4+
GNU development environment (gcc, make)centos
4、本文生產環境以及系統要求tomcat
CentOS Linux release 7.6.1810 (Core)x86 64
(服務器必須是centos7版本,centos6以及6如下的版本不能使用APR)
Server version: Apache Tomcat/8.5.35
java version 「1.8.0_191」安全
5、安裝APR相關依賴包服務器
[root@APR ~]# yum -y install gcc gcc-c++ libtool* autoconf automake expat-devel perl perl-devel
6、下載安裝包併發
[root@APR ~]# mkdir /software
[root@APR ~]# cd /software/
[root@APR software]# wget http://mirror.rise.ph/apache//apr/apr-1.6.5.tar.gz
[root@APR software]# wget http://mirror.rise.ph/apache//apr/apr-iconv-1.2.2.tar.gz
[root@APR software]# wget http://mirror.rise.ph/apache//apr/apr-util-1.6.1.tar.gz
[root@APR software]# wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1.tar.gz
友情提示:apr、apr-iconv、apr-util都是截止到2019年1月22日的最新版本,openssl是最新的穩定版,openssl的官網原文翻譯以下:
最新的穩定版本是1.1.1系列。這也是咱們的長期支持(LTS)版本,支持到2023年9月11日。咱們以前的LTS版本(1.0.2系列)將繼續獲得支持,直到2019年12月31日(安全修復僅在支持的最後一年)。1.1.0系列目前僅接收安全修復程序,並將於2019年9月11日中止支持。鼓勵1.0.2和1.1.0的全部用戶儘快升級到1.1.1。0.9.8,1.0.0和1.0.1版本如今不受支持,不該使用。
所以,建議使用1.1.1版本,不要再使用其餘版本!!!
7、安裝APR
[root@APR software]# tar zxf apr-1.6.5.tar.gz
[root@APR software]# cd apr-1.6.5/
[root@APR apr-1.6.5]# vim configure
默認值:
在第30392行 RM='$RM'
修改成:
在第30392行 RM='$RM -f'
[root@APR apr-1.6.5]# ./configure --prefix=/usr/local/apr && make && make install
8、安裝apr-iconv
[root@APR apr-1.6.5]# cd ..
[root@APR software]# tar zxf apr-iconv-1.2.2.tar.gz
[root@APR software]# cd apr-iconv-1.2.2/
[root@APR apr-iconv-1.2.2]# ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr && make && make install
9、安裝apr-util
[root@APR apr-iconv-1.2.2]# cd ..
[root@APR software]# tar zxf apr-util-1.6.1.tar.gz
[root@APR software]# cd apr-util-1.6.1/
[root@APR apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv && make && make install
10、安裝OpenSSL
[root@APR apr-util-1.6.1]# cd ..
[root@APR software]# tar zxf openssl-1.1.1.tar.gz
[root@APR software]# cd openssl-1.1.1/
[root@APR openssl-1.1.1]# ./config --prefix=/usr/local/openssl && make -j $(grep processor /proc/cpuinfo | wc -l) && make install
11、安裝tomcat-native
[root@APR openssl-1.1.1]# cd /usr/local/tomcat/bin/
[root@APR bin]# tar zxf tomcat-native.tar.gz
[root@APR bin]# cd tomcat-native-1.2.18-src/native/
[root@APR native]# ./configure --with-ssl=/usr/local/openssl --with-apr=/usr/local/apr --with-java-home=/usr/local/java && make && make install
友情提示1:博主這裏的jdk安裝路徑在/usr/local/java,是自定義環境,讀者切莫直接粘貼,要改爲你實際的jdk路徑。
友情提示2:注意:若是以上 configure 失敗,能夠執行 make distclean 清除。
12、添加環境變量
[root@APR native]# vim /etc/profile.d/apr.sh
export LD_LIBRARY_PATH=/usr/local/apr/lib:$LD_LIBRARY_PATH
[root@APR native]# source /etc/profile.d/apr.sh
到此爲止APR就安裝完成了,下面咱們使用APR模式
十3、修改tomcat配置文件,使用APR運行模式,並測試是否安裝成功
[root@APR native]# vim /usr/local/tomcat/conf/server.xml //請按你實際tomcat安裝路徑爲準
默認值:69 Connector port="8080" protocol="HTTP/1.1" 70 connectionTimeout="20000" 71 redirectPort="8443"修改成:
69 Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" 70 connectionTimeout="20000" 71 redirectPort="8443"默認值:
116 Connector port="8009" protocol="AJP/1.3" redirectPort="8443"修改成:
116 Connector port="8009" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443"友情提示:若是你的服務器上沒有使用apache,則能夠把8009端口的那一行配置給註釋掉。
十4、重啓tomcat,並查看日誌
[root@APR native]# /usr/local/tomcat/bin/shutdown.sh
[root@APR native]# /usr/local/tomcat/bin/startup.sh
[root@APR native]# tail -f /usr/local/tomcat/logs/catalina.out
22-Jan-2019 12:17:18.157 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [11] ms
22-Jan-2019 12:17:18.157 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/examples]
22-Jan-2019 12:17:18.321 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/examples] has finished in [163] ms
22-Jan-2019 12:17:18.321 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/host-manager]
22-Jan-2019 12:17:18.337 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/host-manager] has finished in [16] ms
22-Jan-2019 12:17:18.337 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/manager]
22-Jan-2019 12:17:18.351 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/manager] has finished in [14] ms
22-Jan-2019 12:17:18.354 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
22-Jan-2019 12:17:18.364 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-apr-8009"]
22-Jan-2019 12:17:18.366 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 474 ms
友情提示:查看日誌看到「http-apr-8080」和「ajp-apr-8009」字樣就是APR模式運行成功。
十5、查看日誌可能出現的錯誤
INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
若是遇到這樣的錯誤,解決辦法以下(通常不會出現這樣的錯誤,博主安裝了不下10遍APR沒出現這問題,這個問題來自一個同事的安裝報錯):
問題出現緣由:提示找不到基於APR的Apache Tomcat Native庫,所以沒法使用APR模式啓動。
解決方案:
cp -R /usr/local/apr/lib/* /usr/lib64 cp -R /usr/local/apr/lib/* /usr/lib
而後再次重啓tomcat便可!
十6、請支持正版博客地址,盜鏈可恥