Tomcat能夠使用Apache Portable Runtime來提供卓越的性能及可擴展性,更好地與本地服務器技術的集成。Apache Portable Runtime是一個高度可移植的庫,位於Apache HTTP Server 2.x的核心。APR有許多用途,包括訪問高級IO功能(如sendfile,epoll和OpenSSL),操做系統級功能(隨機數生成,系統狀態等)以及本地進程處理(共享內存,NT管道和Unix套接字)。java

這些功能不單單是一個後端集中的技術,還能夠讓Tomcat成爲通用的網絡服務器,能夠實現與本地的其餘Web技術更好的集成,並使Java成爲一個完整的網絡服務器平臺。c++

官方要求:web

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)apache

生產環境:vim

CentOS Linux release 7.3.1611 (Core) x86 64
Server version: Apache Tomcat/8.5.16
java version 「1.8.0_131」後端

Apache Tomcat/8.5.16 的安裝請查看《Linux Apache Tomcat 8.5 安裝與配置tomcat

1.安裝相關依賴包性能優化

# yum -y install gcc gcc-c++ libtool* autoconf automake expat-devel perl perl-devel

2.下載安裝包服務器

# cd /tmp/
# wget http://mirror.bit.edu.cn/apache/apr/apr-1.6.2.tar.gz
# wget http://mirror.bit.edu.cn/apache/apr/apr-iconv-1.2.1.tar.gz
# wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.6.0.tar.gz
# wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz

3.安裝APR網絡

# tar zxvf apr-1.6.2.tar.gz
# cd apr-1.6.2
# vim configure

默認值:

RM='$RM'

修改成:

RM='$RM -f'
# ./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.6.0.tar.gz
# cd apr-util-1.6.0
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
# make && make install

6.安裝OpenSSL

# tar zxvf openssl-1.1.0f.tar.gz
# cd openssl-1.1.0f
# ./config --prefix=/usr/local/openssl
# make -j 4 && make install

7.安裝tomcat-native

# cd /usr/local/tomcat/bin/
# tar zxvf tomcat-native.tar.gz
# cd tomcat-native-1.2.12-src/native
# ./configure --with-ssl=/usr/local/openssl --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/java/jdk1.8.0_131
# make && make install

注意:若是以上 configure 失敗,能夠執行 make distclean 清除

8.添加變量內容

# vim /etc/profile.d/jdk.sh
export LD_LIBRARY_PATH=/usr/local/apr/lib:$LD_LIBRARY_PATH
# source /etc/profile.d/jdk.sh

至此APR安裝成功。

9.接下來須要修改tomcat配置文件中的APR運行模式,並測試是否安裝成功。

# vim /usr/local/tomcat/conf/server.xml

默認值:

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

修改成:

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

默認值:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

修改成:

<Connector port="8009" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />

10.如今重啓tomcat服務,並查看啓動日誌

# systemctl restart tomcat
# cat /usr/local/tomcat/logs/catalina.out
...
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]
INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
...

注意:能夠看到紅色部分,提示找不到基於APR的Apache Tomcat Native庫,所以沒法使用APR模式啓動。

解決方案:

# cp -R /usr/local/apr/lib/* /usr/lib64
# cp -R /usr/local/apr/lib/* /usr/lib

再次重啓tomcat,並查看啓動日誌

# cat /usr/local/tomcat/logs/catalina.out
...
INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8009"]
...

能夠看到已經以apr協議模式啓動成功,經基於APR的技術web壓力測試,Tomcat的性能飆升。

轉載: Tomcat 8.5 基於 Apache Portable Runtime(APR)庫性能優化 | 任我樂