文章目录

  • 简介
  • Tomcat的连接方式
  • APR和Tomcat Native
  • 在tomcat中使用APR

简介

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。

#以下四种Connector实现都是直接处理来自客户端Http请求
org.apache.coyote.http11.Http11Protocol : 支持HTTP/1.1 协议的连接器。org.apache.coyote.http11.Http11NioProtocol : 支持HTTP/1.1 协议+New IO的连接器。org.apache.coyote.http11.Http11Nio2Protocol : 支持HTTP/1.1 协议+New IO2的连接器。org.apache.coyote.http11.Http11AprProtocol : 使用APR(Apache portable runtime)技术的连接器,利用Native#以下四种实现方法则是与web server打交道
org.apache.coyote.ajp.AjpProtocol:使用AJP协议的连接器,实现与web server(如Apache httpd)之间的通信org.apache.coyote.ajp.AjpNioProtocol:SJP协议+ New IOorg.apache.coyote.ajp.AjpNio2Protocol:SJP协议+ New IO2org.apache.coyote.ajp.AjpAprProtocol:AJP + APR

讲下他们的区别,BIO就是block IO是最最基础的IO方式, 我们通过这样来配置:

<Connector  port=”8080”
protocol=”HTTP/1.1”maxThreads=”150”
connectionTimeout=”20000”
redirectPort=”8443” />

Tomcat7以下版本在默认情况下是以bio模式运行的。自Tomcat 8.5 版本开始,Tomcat就移除了对BIO的支持。

New IO是基于java.nio包及其子包的一种IO方式。能提供非阻塞IO方式,比传统的BIO拥有与更加高效的运行效率。

我们这样配置New IO:

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

New IO和New IO2有什么区别呢?

New IO2是tomcat8中引入的IO方式,我们可以这样配置:

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

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我们可以获得如下的特性:

  1. Non-blocking I/O和请求连接保持。
  2. 支持OpenSSL和TLS/SSL。

Tomcat Native是一个库,通过这个库,Tomcat可以使用APR。

所以使用Tomcat Native的前提是需要安装好APR library,OpenSSL和JDK。

我们可以通过下面的方式来安装apr和openssl:

debian based linux系统:

apt-get install libapr1.0-dev libssl-dev

rpm based Linux 系统:

yum install apr-devel openssl-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 && make install

生成的lib文件将会被放入$CATALINA_HOME/lib中。

在tomcat中使用APR

安装好tcnative之后,我们就可以在tomcat中使用APR了。

先检查一下conf/server.xml中是否有下面的配置:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

然后我们需要修改 $CATALINA_HOME/bin/setenv.sh 将tc-native 的lib文件添加到LD_LIBRARY_PATH中。

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib
export LD_LIBRARY_PATH

最后添加APR的连接:

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

运行即可。

从日志中,我们会发现下面的内容:

org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.x.y.
org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080

说明APR安装完毕并且已经在被使用了。

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/tomcat-native-startup/

本文来源:flydean的博客

欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

使用Tomcat Native提升Tomcat IO效率相关推荐

  1. The Apache Tomcat Native library which allows optimal performance in produc

    在启动Tomcat 7.0时发现第一条信息便是: The Apache Tomcat Native library which allows optimal performance in produc ...

  2. 在启动Tomcat 6.0时发现第一条信息便是: The Apache Tomcat Native library which allows optimal performance in produc

    地址:http://blog.chinaunix.net/uid-21227800-id-65928.html 解决方法: 相关文档:http://tomcat.apache.org/tomcat-6 ...

  3. The APR based Apache Tomcat Native library

    Tomcat启动的时候出现下面这样的提示: 2015-11-06 14:24:12 org.apache.catalina.core.AprLifecycleListener init 信息: The ...

  4. 解决Tomcat启动时出现的The APR based Apache Tomcat Native library异常

    现在用的tomcat6.0,不知道大家注意没有,在启动的时候,那个启动窗口最上面出现这样一条信息: 信息: The APR based Apache Tomcat Native library whi ...

  5. SpringBoot内置tomcat出现error:An incompatible version [1.1.32] of the APR based Apache Tomcat Native lib

    SpringBoot内置tomcat出现error:An incompatible version [1.1.32] of the APR based Apache Tomcat Native lib ...

  6. Tomcat 启动报错The APR based Apache Tomcat Native l...

    2019独角兽企业重金招聘Python工程师标准>>> 转:Tomcat 启动报错The APR based Apache Tomcat Native l... 启动tomcat时  ...

  7. docker 启动 nacos Failed to bind properties under ‘server.tomcat.basedir‘ to java.io.File 解决

    配置文件中默认为 server.tomcat.basedir= 启动时出错,解决方案给该值赋予一个存在的路径 server.tomcat.basedir=/ 重新启动即可解决问题 来源docker 按 ...

  8. tomcat启动出现The APR based Apache Tomcat Native library错误

    今天在idea中直接启动springboot项目时,出现以下错误: The APR based Apache Tomcat Native library which allows optimal pe ...

  9. Myeclipse 启动报错: 信息: The APR based Apache Tomcat Native library which allows optimal perfo...

    朋友们有时候在用Myeclipse5.0以上版本的时候,在启动Tomcat服务后,在控制台上面会出现这样的信息:  信息: The APR based Apache Tomcat Native lib ...

最新文章

  1. 看我如何下载韩寒博客文章笔记
  2. AI创业周报:元宇宙时代来临!环球墨非风头正盛,53岁女博士领现象级芯片公司获数亿元融资...
  3. 【C++】40. std::array与int a[]方式创建数组的区别
  4. Interleaving String
  5. Lombok的使用方法
  6. C语言一看就能上手的干货!你确定你不来看吗?
  7. [网络收集]LINUX磁盘挂载mount和共享
  8. 动态调试 ida linux,IDA动态调试-ELF
  9. 从云计算到人工智能 都逃不过被炒作的命运
  10. opencv 安装及配置
  11. 球面投影全景图快速拼接
  12. HCIP(八)---OSPF的防环机制(SPF算法)
  13. number -1 is not iterable (cannot read property Symbol(Symbol.iterator))
  14. java实训项目百度脑图
  15. 【计算机图形学实验二——实现圆的中点算法、椭圆的中点算法】
  16. uni-app新闻小程序
  17. CAN总线接口静电保护及ESD二极管选型
  18. C++ 关键字 typeid, typename
  19. EXCEL中用TEXT函数将文本转换成日期
  20. 泰勒级数为什么不可以展开?

热门文章

  1. 贪心算法-03哈夫曼编码问题
  2. android软件的data使用方法,实例讲解Android中SQLiteDatabase使用方法
  3. POJ3130(还是判断多边形的内核是否存在)
  4. 1.const关键字.rs
  5. 给Source Insight做个外挂系列之五--Insight “TabSiPlus”
  6. MFC内嵌web页面
  7. UDT协议实现分析——连接的建立
  8. Linux网络编程 | 定时事件 :Linux常见定时方法、定时器链表、空闲断开
  9. 科普:CPU缓存一致性协议
  10. 费解 | 为什么很多程序员工作时都戴耳机?