使用Tomcat Native提升Tomcat IO效率的方法详解

 更新时间:2020年12月12日 08:54:47   作者:flydean程序那些事  
这篇文章主要介绍了使用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。

#以下四种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 IO

org.apache.coyote.ajp.AjpNio2Protocol:SJP协议+ New IO2

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

  • Non-blocking I/O和请求连接保持。
  • 支持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

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

到此这篇关于使用Tomcat Native提升Tomcat IO效率的方法详解的文章就介绍到这了,更多相关Tomcat Native提升Tomcat IO效率内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • tomcat何时写回响应数据报的详析

    tomcat何时写回响应数据报的详析

    这篇文章主要给大家介绍了关于tomcat是何时写回响应数据报的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用tomcat具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • eclipse配置Tomcat和Tomcat出现无效端口解决办法

    eclipse配置Tomcat和Tomcat出现无效端口解决办法

    本文主要介绍了eclipse配置Tomcat和Tomcat出现无效端口解决办法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • redission-tomcat快速实现从单机部署到多机部署详解

    redission-tomcat快速实现从单机部署到多机部署详解

    这篇文章主要介绍了redission-tomcat快速实现从单机部署到多机部署详解,本文介绍一个基于redis的tomcat session管理开源项目:redission-tomcat,可无代码侵入式地快速实现session共享,需要的朋友可以参考下
    2019-06-06
  • Tomcat 发布程序使用cmd查看端口占用、相应进程、杀死进程等的命令

    Tomcat 发布程序使用cmd查看端口占用、相应进程、杀死进程等的命令

    这篇文章主要介绍了Tomcat 发布程序使用cmd查看端口占用、相应进程、杀死进程等的命令的相关资料,需要的朋友可以参考下
    2016-12-12
  • Tomcat 8.5 环境搭建步骤

    Tomcat 8.5 环境搭建步骤

    Tomcat是一个流行的开源Java Servlet容器,它提供了一个运行Java Web应用程序的平台,本文将为您提供关于如何搭建Tomcat 8.5环境的详细指南,感兴趣的朋友一起看看吧
    2024-01-01
  • 详解Tomcat多域名配置(多个项目共用80端口)

    详解Tomcat多域名配置(多个项目共用80端口)

    本篇文章主要介绍了Tomcat多域名配置(多个项目共用80端口),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Tomcat中的Connector配置讲解

    Tomcat中的Connector配置讲解

    今天小编就为大家分享一篇关于Tomcat中的Connector配置讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • tomcat启动startup.bat一闪而过问题的解决方法【亲测有效】

    tomcat启动startup.bat一闪而过问题的解决方法【亲测有效】

    这篇文章主要介绍了tomcat启动startup.bat一闪而过问题的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • 搭建Tomcat 8源码开发环境的步骤详解

    搭建Tomcat 8源码开发环境的步骤详解

    相信大家都知道开源软件tomcat目前几乎已经是Java web开发的必备软件了,目前有很多关于tomcat的书籍,已经通过配置对tomcat进行一些跟应用业务功能的调优,但感觉如果仅仅只是了解一些配置,可能稍微少了点什么,下面通过本文深入到源代码中进行学些和了解。
    2016-10-10
  • Tomcat配置及如何在Eclipse中启动

    Tomcat配置及如何在Eclipse中启动

    这篇文章主要介绍了Tomcat配置及如何在Eclipse中启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02

最新评论