使用Tomcat Native提升Tomcat IO效率的方法详解
简介
IO有很多种,从最开始的BlockIO,到nonblockingIO,再到IO多路复用和异步IO,一步一步的将IO的性能提升做到极致。
今天我们要介绍一下怎么使用TomcatNative来提升TomcatIO的效率。
Tomcat的连接方式
Tomcat中使用连接器来处理与外部客户端的通信。Connecter主要用来接受外部客户端的请求,并转交给处理引擎处理。
在Tomcat中有两种Connector。一种是HTTPconnector,一种是AJPconnector。
HTTPconnector大家应该很好理解,它也是tomcat默认使用的连接器。
还有一个连接器叫做AJP,AJP主要是用来和web服务器进行通信用的,因为AJP协议的速度要比HTTP的快,所以AJP除了用来和其他webserver进行通信之外,还可以通过AJP来构建tomcat集群。
这两种方式都支持4中协议,分别是BIO,NIO,NIO2和APR。
#以下四种Connector实现都是直接处理来自客户端Http请求 org.apache.coyote.http11.Http11Protocol:支持HTTP/1.1协议的连接器。 org.apache.coyote.http11.Http11NioProtocol:支持HTTP/1.1协议+NewIO的连接器。 org.apache.coyote.http11.Http11Nio2Protocol:支持HTTP/1.1协议+NewIO2的连接器。 org.apache.coyote.http11.Http11AprProtocol:使用APR(Apacheportableruntime)技术的连接器,利用Native #以下四种实现方法则是与webserver打交道 org.apache.coyote.ajp.AjpProtocol:使用AJP协议的连接器,实现与webserver(如Apachehttpd)之间的通信 org.apache.coyote.ajp.AjpNioProtocol:SJP协议+NewIO org.apache.coyote.ajp.AjpNio2Protocol:SJP协议+NewIO2 org.apache.coyote.ajp.AjpAprProtocol:AJP+APR
讲下他们的区别,BIO就是blockIO是最最基础的IO方式,我们通过这样来配置:
Tomcat7以下版本在默认情况下是以bio模式运行的。自Tomcat8.5版本开始,Tomcat就移除了对BIO的支持。
NewIO是基于java.nio包及其子包的一种IO方式。能提供非阻塞IO方式,比传统的BIO拥有与更加高效的运行效率。
我们这样配置NewIO:
NewIO和NewIO2有什么区别呢?
NewIO2是tomcat8中引入的IO方式,我们可以这样配置:
apr这种方式就高级了,这个是我们今天要讲解的tomcatnative的主要作用。
APR和TomcatNative
apr的全称是ApachePortableRuntime,它是一个高度可移植的库,它是ApacheHTTPServer2.x的核心。APR有许多用途,包括访问高级IO功能(例如sendfile,epoll和OpenSSL),操作系统级别的功能(生成随机数,系统状态等)和本机进程处理(共享内存,NT管道和Unix套接字)。
Tomcat可以通过JNI的形式调用ApacheHTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。
通过使用APR我们可以获得如下的特性:
- Non-blockingI/O和请求连接保持。
- 支持OpenSSL和TLS/SSL。
TomcatNative是一个库,通过这个库,Tomcat可以使用APR。
所以使用TomcatNative的前提是需要安装好APRlibrary,OpenSSL和JDK。
我们可以通过下面的方式来安装apr和openssl:
debianbasedlinux系统:
apt-getinstalllibapr1.0-devlibssl-dev
rpmbasedLinux系统:
yuminstallapr-developenssl-devel
在windows下面,tcnative是以一个dll的形式来提供的,我们直接下载使用就可以了。
但是在linux下面,因为平台不同,所以在linux下面tcnative是需要自行编译的。
一般来说我们可以在bin/tomcat-native.tar.gz找到tcnative的源码包。将其解压。
先运行configure命令:
./configure--with-apr=/usr/bin/apr-1-config\ --with-java-home=/home/jfclere/JAVA/jdk1.7.0_80/\ --with-ssl=yes\ --prefix=$CATALINA_HOME
再进行make操作:
make&&makeinstall
生成的lib文件将会被放入$CATALINA_HOME/lib中。
在tomcat中使用APR
安装好tcnative之后,我们就可以在tomcat中使用APR了。
先检查一下conf/server.xml中是否有下面的配置:
然后我们需要修改$CATALINA_HOME/bin/setenv.sh将tc-native的lib文件添加到LD_LIBRARY_PATH中。
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib exportLD_LIBRARY_PATH
最后添加APR的连接:
运行即可。
从日志中,我们会发现下面的内容:
org.apache.catalina.core.AprLifecycleListenerinit
INFO:LoadedAPRbasedApacheTomcatNativelibrary1.x.y.
org.apache.catalina.core.AprLifecycleListenerinit
INFO:APRcapabilities:IPv6[true],sendfile[true],acceptfilters[false],random[true].
org.apache.coyote.http11.Http11AprProtocolinit
说明APR安装完毕并且已经在被使用了。
到此这篇关于使用TomcatNative提升TomcatIO效率的方法详解的文章就介绍到这了,更多相关TomcatNative提升TomcatIO效率内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!