tomcat bio nio apr 模式 ---待自己整理

来源:互联网 发布:选择排序和冒泡算法 编辑:程序博客网 时间:2024/06/05 19:41

原文链接:http://blog.csdn.net/xyang81/article/details/51502766

Tomcat支持三种接收请求的处理方式:BIO、NIO、APR 
1>、BIO模式:阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即Java.io包及其子包)。Tomcat7以下版本默认情况下是以bio模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低。启动tomcat看到如下日志,表示使用的是BIO模式: 
BIO模式 
2>、NIO模式:是java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行比较简单,只需要在Tomcat安装目录/conf/server.xml文件中将如下配置:

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

修改成:

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

注意:Tomcat8以上版本,默认使用的就是NIO模式,不需要额外修改 
NIO模式 
3>、apr模式:简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能, 也是Tomcat运行高并发应用的首选模式。 
启用这种模式稍微麻烦一些,需要安装一些依赖库,下面以在CentOS7 mini版环境下Tomcat-8.0.35为例,介绍安装步聚:

APR 1.2+ development headers (libapr1-dev package)OpenSSL 0.9.7+ development headers (libssl-dev package)JNI headers from Java compatible JDK 1.4+GNU development environment (gcc, make)

启用apr模式步聚

1、安装依赖库

因为apr模式本质是使用JNI技术调用操作系统IO接口,需要用到相关API的头文件

yum install apr-develyum install openssl-develyum install gccyum install make
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

注意:openssl库要求在0.9.7以上版本,APR要求在1.2以上版本,用rpm -qa | grep openssl检查本机安装的依赖库版本是否大于或等于apr要求的版本。

2、安装apr动态库

进入tomcat的bin目录,解压tomcat-native.tar.gz文件,并进入tomcat-native-1.2.7-src/native目录,执行./configure && make && make install 命令,动态库默认安装在/usr/local/apr/lib目录下,如下图所示: 
安装成功

3、配置APR本地库到系统共享库搜索路径中

方式1:

设置LD_LIBRARY_PATH和LD_RUN_PATH环境变量,指向/usr/local/apr/lib目录,可配置到$HOME/.profile文件中

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/libexport LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib
  • 1
  • 2
  • 1
  • 2

方式2:

拷贝/usr/local/apr/lib目录下所有动态库到/usr/lib或/lib系统共享库搜索目录下即可。

copy /usr/local/apr/lib/libtcnative* /usr/lib/
  • 1
  • 1

方式3:(推荐)

编辑$TOMCAT_HOME/bin/catalina.sh文件,在虚拟机启动参数JAVA_OPTS中添加java.library.path参数,指定apr库的路径

JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
  • 1
  • 1

Tomcat8以下版本,需要指定运行模式,将protocol从HTTP/1.1改成org.apache.coyote.http11.Http11AprProtocol

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

运行Tomcat后,看到如下日志表示开启apr模式成功: 
APR模式

如果没有配置SSL相关参数,并且开启了SSL,启动时会发生org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform异常: 
未配置ssl异常
如果不想启用SSL,将server.xml中apr模式下ssl关闭即可:

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

将SSLEngine的值从on改成off即可:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
  • 1
  • 1
Tomcat 6.x版本从6.0.32开始就默认支持apr。Tomcat 7.x版本从7.0.30开始就默认支持apr。因此,如果读者使用的Tomcat版本比较陈旧的话,强烈建议升级到最新的稳定版本。

Tomcat官网APR配置:http://tomcat.apache.org/tomcat-8.0-doc/apr.html#Linux

--------------------------------------------------------tomcat7整合APR(win7和linux环境下)-------------------------------------------------------

http://blog.csdn.net/zh592677127/article/details/8603490


tomcat7如果没配置APR,启动时会报这样的错误日志:
信息: The APR based Apache Tomcat Native library which allows optimal performanc e in production environments was not found on the java.library.path: D:\Java\jdk 1.5.0_07\bin,提示没找到APR的配置
先解释一下APR,APR: Apache Portable Runtime,可看作是Apache轻便运行时,在http://tomcat.apache.org/tomcat-6.0-doc/apr.html 对APR进行了详细介绍,说白了作用就是如何在 Tomcat中使用JNI的方式来读取文件以及进行网络传输。这个东西可以大大提升Tomcat对静态文件的处理性能,同时如果你使用了HTTPS方式传输的话,也可以提升SSL的处理性能。可以不使用Apache也能提高对静态文件的处理能力。
  Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术.
  APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括访问高级IO功能(例如sendfile,epoll和OpenSSL),OS级别功能(随机数生成,系统状态等等),本地进程管理(共享内存,NT管道和UNIX sockets)。这些功能可以使Tomcat作为一个通常的前台WEB服务器,能更好地和其它本地web技术集成,总体上让Java更有效率作为一个高性能web服务器平台而不是简单作为后台容器。
  在产品环境中,特别是直接使用Tomcat做WEB服务器的时候,应该使用Tomcat Native来提高其性能。
  要测APR给tomcat带来的好处最好的方法是在慢速网络上(模拟 Internet),将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待。但是配上APR之后,并发的线程数量明显下降,从原来的300可能会马上下降到只有几十,新的请求会毫无阻塞的进来。在局域网环境测,就算是 400个并发,也是一瞬间就处理/传输完毕,但是在真实的Internet环境下,页面处理时间只占0.1%都不到,绝大部分时间都用来页面传输。
  一. Windows环境:
  APR需要安装三个组件:
     1、APR library
     2、JNI wrappers for APR used by Tomcat (libtcnative)
     3、OpenSSL libraries
  从http://tomcat.heanet.ie/native/1.1.14/binaries/win32/ ,下载tcnative-1.1.10.dll,tcnative-1.1.10.dll已经包含了上面的三个组件,所以只要把tcnative-1.1.10.dll拷贝到tomcat的bin下就行了。
  然后启动tomcat,启动后的信息为:信息: Loaded APR based Apache Tomcat Native library 1.1.14. 2009-12-24 14:17:59 org.apache.catalina.core.AprLifecycleListener init 信息: APR capabilities: IPv6 [false], sendfile [true], accept filters [false], r andom [true]. 2009-12-24 14:18:00 org.apache.coyote.http11.Http11AprProtocol init 这说明APR配置成功,已经启用。
  windows中还有一种方式是:
    1.将 tcnative-1.1.10.dll 放于tomcat的同级目录 APR/lib 下;
    2. 修改一下 catalina.bat,加上set CATALINA_OPTS="-Djava.library.path=../../APR/lib"
  还有就是直接将 tcnative-1.1.10.dll加到系统变量PATH里面,也可以放在 windows/system32 下面。
  二. Linux环境:
  (1).安装APR
  APR需要三个组件:
    1.apr-1.3.9.tar.gz
    2.apr-util-1.3.9.tar.gz
    3.tomcat-native.tar.gz
  从 http://apr.apache.org/download.cgi 上可下载apr-1.3.9.tar.gz和apr-util-1.3.9.tar.gz,tomcat中自带 tomcat-native.tar.gz ,
  将 apr-1.3.9.tar.gz和 apr-util-1.3.9.tar.gz 上传到/usr/local/目录,
  # wget   http://apache.freelamp.com/apr/apr-1.3.9.tar.gz
  #apr-1.3.9.tar.gz
  #tar zxvf apr-1.3.9.tar.gz
  #cd apr-1.3.9
  #./configure
  #make
  #make install
  执行完后,会有提示信息:
  Libraries have been installed in:
    /usr/local/apr/lib
  If you ever happen to want to link against installed libraries
  in a given directory, LIBDIR, you must either use libtool, and
  specify the full pathname of the library, or use the `-LLIBDIR'
  flag during linking and do at least one of the following:
    - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
      during execution
    - add LIBDIR to the `LD_RUN_PATH' environment variable
      during linking
    - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
    - have your system administrator add LIBDIR to `/etc/ld.so.conf'
  See any operating system documentation about shared libraries for
  more information, such as the ld(1) and ld.so(8) manual pages.
  会在/local生成apr目录, apr-1.3.9 的库安装在/usr/local/apr/lib目录。
  # wget   http://apache.freelamp.com/apr/apr -util -1.3.9.tar.gz
  #apr-util-1.3.9.tar.gz
  #tar zxvf apr-util-1.3.9.tar.gz
  #cd apr-util-1.3.9
  #./configure --with-apr=/usr/local/apr    //配置指向apr-1.3.9的安装目录
  #make
  #make install
  command执行完后,提示信息和 apr-1.3.9的信息相同,表示apr-util-1.3.9 的库也安装在/usr/local/apr/lib目录。
  安装 tomcat-native组件
  #cd /usr/local/tomcat6/bin
  #tar zxvf tomcat-native.tar.gz
  #cd tomcat-native-1.1.16-src/jni/native
  # . /configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.5.0_20
  #make
  #make install
  command执行完的提示信息和安装  apr-1.3.9 的提示相同,表示 tomcat-native 的库 也是安装在 /usr/local/apr/lib目录。
  (2)设置 Tomcat 整合 APR
  有两种方法:
  1.修改 tomcat 的启动 shell ( catalina.sh ),在该文件中加入启动参数: CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
  2.也可以在环境变量中配置/etc/profile中加入
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr /lib
       vi  /etc/profile 
      # 后面添加以下内容
       export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/ local /apr/lib
      # 使profile生效,  
       source  /etc/profile
  (3).判断安装成功:
  启动tomcat,看日志
  #bin/startup.sh 
  #head  logs/catalina.out
  如果看到下面的启动日志,表示成功。
  2009-12-24 17:34:32 org.apache.coyote.http11.Http11AprProtocol init

阅读全文
0 0
原创粉丝点击