使用 Tomcat Native 提升 Tomcat IO 效率
简介
IO 有很多种,从最开始的 Block IO,到 nonblocking IO,再到 IO 多路复用和异步 IO,一步一步的将 IO 的性能提升做到极致。
今天我们要介绍一下怎么使用 Tomcat Native 来提升 Tomcat IO 的效率。
Tomcat 的连接方式
Tomcat 中使用连接器来处理与外部客户端的通信。Connecter 主要用来接受外部客户端的请求,并转交给处理引擎处理。
在 Tomcat 中有两种 Connector。一种是 HTTP connector, 一种是 AJP connector。
HTTP connector 大家应该很好理解,它也是 tomcat 默认使用的连接器。
还有一个连接器叫做 AJP,AJP 主要是用来和 web 服务器进行通信用的,因为 AJP 协议的速度要比 HTTP 的快,所以 AJP 除了用来和其他 webserver 进行通信之外,还可以通过 AJP 来构建 tomcat 集群。
这两种方式都支持 4 中协议,分别是 BIO,NIO,NIO2 和 APR。
讲下他们的区别,BIO 就是 block IO 是最最基础的 IO 方式, 我们通过这样来配置:
Tomcat7 以下版本在默认情况下是以 bio 模式运行的。自 Tomcat 8.5 版本开始,Tomcat 就移除了对 BIO 的支持。
New IO 是基于 java.nio 包及其子包的一种 IO 方式。能提供非阻塞 IO 方式,比传统的 BIO 拥有与更加高效的运行效率。
我们这样配置 New IO:
New IO 和 New IO2 有什么区别呢?
New IO2 是 tomcat8 中引入的 IO 方式,我们可以这样配置:
apr 这种方式就高级了,这个是我们今天要讲解的 tomcat native 的主要作用。
APR 和 Tomcat Native
apr 的全称是 Apache Portable Runtime,它是一个高度可移植的库,它是 Apache HTTP Server 2.x 的核心。 APR 有许多用途,包括访问高级 IO 功能(例如 sendfile,epoll 和 OpenSSL),操作系统级别的功能(生成随机数,系统状态等)和本机进程处理(共享内存,NT 管道和 Unix 套接字)。
Tomcat 可以通过 JNI 的形式调用 Apache HTTP 服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高 Tomcat 对静态文件的处理性能。
通过使用 APR 我们可以获得如下的特性:
Non-blocking I/O 和请求连接保持。
支持 OpenSSL 和 TLS/SSL。
Tomcat Native 是一个库,通过这个库,Tomcat 可以使用 APR。
所以使用 Tomcat Native 的前提是需要安装好 APR library,OpenSSL 和 JDK。
我们可以通过下面的方式来安装 apr 和 openssl:
debian based linux 系统:
rpm based Linux 系统:
在 windows 下面,tcnative 是以一个 dll 的形式来提供的,我们直接下载使用就可以了。
但是在 linux 下面,因为平台不同,所以在 linux 下面 tcnative 是需要自行编译的。
一般来说我们可以在 bin/tomcat-native.tar.gz 找到 tcnative 的源码包。将其解压。
先运行 configure 命令:
再进行 make 操作:
生成的 lib 文件将会被放入 $CATALINA_HOME/lib 中。
在 tomcat 中使用 APR
安装好 tcnative 之后,我们就可以在 tomcat 中使用 APR 了。
先检查一下 conf/server.xml 中是否有下面的配置:
然后我们需要修改 $CATALINA_HOME/bin/setenv.sh 将 tc-native 的 lib 文件添加到 LD_LIBRARY_PATH 中。
最后添加 APR 的连接:
运行即可。
从日志中,我们会发现下面的内容:
说明 APR 安装完毕并且已经在被使用了。
本文作者:flydean 程序那些事
本文链接:http://www.flydean.com/tomcat-native-startup/
本文来源:flydean 的博客
欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
版权声明: 本文为 InfoQ 作者【程序那些事】的原创文章。
原文链接:【http://xie.infoq.cn/article/7c2f8c957b5c9bfc890eb2ed6】。文章转载请联系作者。
评论