Tomcat 8/9 基于APR库的高并发性能优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat 8/9 基于APR库的高并发性能优化相关的知识,希望对你有一定的参考价值。
一、知识点扫盲
什么是APR?
Apache Portable Runtime(APR)项目的任务是创建和维护软件库,为底层平台特定的实现提供可预测且一致的接口。主要目标是提供一个API,软件开发人员可以对其进行编码,并确保可预测的行为,如果不是相同的行为,无论其软件构建的平台如何,都可以减轻他们编写特殊情况的需要,以便解决或采取行动。平台特定缺陷或功能的优势。
二、tomcat的三种模式
Tomcat的运行模式有3种,即BIO、NIO和APR。
1、BIO(blocking I/O)
即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。是基于JAVA的HTTP/1.1连接器,Tomcat7以下版本在默认情况下是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。(Tomcat7 或以下,在 Linux 系统中默认使用这种方式。建议弃用,本模式已经被淘汰。
2、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.5、NIO2(new I/O2)
就是NIO模式的增强版,功能和NIO一样,但是性能更强。
想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为:
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
3、APR
安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.
必须要安装apr和native,直接启动就支持apr。本文下面重点就是介绍怎么安装和启动APR。
三、安装APR前的官方要求
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 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”
五、安装APR相关依赖包
[[email protected] ~]# yum -y install gcc gcc-c++ libtool* autoconf automake expat-devel perl perl-devel
六、下载安装包
[[email protected] ~]# mkdir /software
[[email protected] ~]# cd /software/
[[email protected] software]# wget http://mirror.rise.ph/apache//apr/apr-1.6.5.tar.gz
[[email protected] software]# wget http://mirror.rise.ph/apache//apr/apr-iconv-1.2.2.tar.gz
[[email protected] software]# wget http://mirror.rise.ph/apache//apr/apr-util-1.6.1.tar.gz
[[email protected] 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版本,不要再使用其他版本!!!
七、安装APR
[[email protected] software]# tar zxf apr-1.6.5.tar.gz
[[email protected] software]# cd apr-1.6.5/
[[email protected] apr-1.6.5]# vim configure
默认值:
在第30392行 RM=‘$RM‘
修改为:
在第30392行 RM=‘$RM -f‘
[[email protected] apr-1.6.5]# ./configure --prefix=/usr/local/apr && make && make install
八、安装apr-iconv
[[email protected] apr-1.6.5]# cd ..
[[email protected] software]# tar zxf apr-iconv-1.2.2.tar.gz
[[email protected] software]# cd apr-iconv-1.2.2/
[[email protected] apr-iconv-1.2.2]# ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr && make && make install
九、安装apr-util
[[email protected] apr-iconv-1.2.2]# cd ..
[[email protected] software]# tar zxf apr-util-1.6.1.tar.gz
[[email protected] software]# cd apr-util-1.6.1/
[[email protected] 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
十、安装OpenSSL
[[email protected] apr-util-1.6.1]# cd ..
[[email protected] software]# tar zxf openssl-1.1.1.tar.gz
[[email protected] software]# cd openssl-1.1.1/
[[email protected] openssl-1.1.1]# ./config --prefix=/usr/local/openssl && make -j $(grep processor /proc/cpuinfo | wc -l) && make install
十一、安装tomcat-native
[[email protected] openssl-1.1.1]# cd /usr/local/tomcat/bin/
[[email protected] bin]# tar zxf tomcat-native.tar.gz
[[email protected] bin]# cd tomcat-native-1.2.18-src/native/
[[email protected] native]# ./configure --with-ssl=/usr/local/openssl --with-apr=/usr/bin/apr --with-java-home=/usr/local/java && make && make install
友情提示1:博主这里的jdk安装路径在/usr/local/java,是自定义环境,读者切莫直接粘贴,要改成你实际的jdk路径。
友情提示2:注意:如果以上 configure 失败,可以执行 make distclean 清除。
十二、添加环境变量
[[email protected] native]# vim /etc/profile.d/apr.sh
export LD_LIBRARY_PATH=/usr/local/apr/lib:$LD_LIBRARY_PATH
[[email protected] native]# source /etc/profile.d/apr.sh
到此为止APR就安装完成了,下面我们使用APR模式
十三、修改tomcat配置文件,使用APR运行模式,并测试是否安装成功
[[email protected] 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端口的那一行配置给注释掉。
十四、重启tomcat,并查看日志
[[email protected] native]# /usr/local/tomcat/bin/shutdown.sh
[[email protected] native]# /usr/local/tomcat/bin/startup.sh
[[email protected] 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模式运行成功。
十五、查看日志可能出现的错误
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即可!
十六、请支持正版博客地址,盗链可耻
以上是关于Tomcat 8/9 基于APR库的高并发性能优化的主要内容,如果未能解决你的问题,请参考以下文章