原文链接: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模式: 
 
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" />

修改成:

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

注意:Tomcat8以上版本,默认使用的就是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-devel
yum install openssl-devel
yum install gcc
yum install make

注意: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/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib

方式2:

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

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

方式3:(推荐)

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

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

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

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

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

如果没有配置SSL相关参数,并且开启了SSL,启动时会发生org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform异常: 

如果不想启用SSL,将server.xml中apr模式下ssl关闭即可:

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

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

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
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

tomcat并发优化之三种接收处理请求方式(BIO、NIO、APR)介绍的更多相关文章

  1. Tomcat 8(十)HTTP/AJP Connector、Bio/Nio/Apr性能对照

    Tomcat 8(七)解读Bootstrap介绍过,Connector初始化/启动的时候,将初始化/启动内部的ProtocolHandler.事实上ProtocolHandler仅仅是个接口 Prot ...

  2. Tomcat并发优化和缓存优化

    Tomcat并发优化 1.调整连接器connector的并发处理能力 在Tomcat 配置文件 server.xml 中的 <Connector ... /> 配置中 1.参数说明 max ...

  3. Tomcat Connector三种运行模式(BIO, NIO, APR)的比较和优化

    Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如下: BIO: 一个线程处理一个请求.缺点:并发量高时,线程数较多,浪费资源. Tomc ...

  4. Tomcat Connector三种执行模式(BIO, NIO, APR)的比較和优化

    Tomcat Connector的三种不同的执行模式性能相差非常大,有人測试过的结果例如以下: 这三种模式的不同之处例如以下: BIO: 一个线程处理一个请求.缺点:并发量高时,线程数较多,浪费资源. ...

  5. Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求

    Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939   版权声明 ...

  6. tomcat bio nio apr 模式性能测试

    转自:tomcat bio nio apr 模式性能测试与个人看法 11.11活动当天,服务器负载过大,导致部分页面出现了不可访问的状态.那后来主管就要求调优了,下面是tomcat bio.nio.a ...

  7. Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式及apr配置

    转: http://www.oschina.net/question/54100_16195omcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志. ...

  8. Tomcat Connector(BIO, NIO, APR)三种运行模式(转)

    Tomcat支持三种接收请求的处理方式:BIO.NIO.APR . BIO 阻塞式I/O操作即使用的是传统 I/O操作,Tomcat7以下版本默认情况下是以BIO模式运行的,由于每个请求都要创建一个线 ...

  9. Android Volley框架的几种post提交请求方式

    首先简单描述一下Google的Android开发团队在2013年推出的一个网络通信框架Volley.它的设计目标是进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如下载文件等,Vol ...

随机推荐

  1. 理解WebKit和Chromium:Chromium资源磁盘缓存

    转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 想象一下,如果没有磁盘缓存的世界.当用户访问网页的时候,每次浏览器都需要从网站下载网页,图片,JS等资源 ...

  2. 【Qt编程】Qt学习笔记<二>

    1.      QApplication类和QWidget类都包含在QtGui模块中.所以我们可以只包含这个头文件即可. 2.      在c++中,用new分配了内存空间就需要用delete来释放空 ...

  3. MFC中使用SDL播放音频没有声音的解决方法

    本文所说的音频是指的纯音频,不包含视频的那种. 在控制台中使用SDL播放音频,一般情况下不会有问题. 但是在MFC中使用SDL播放音频的时候,会出现没有声音的情况.经过长时间探索,没有找到特别好的解决 ...

  4. Cocos2D中的ObjectAL简介

    Cocos2D包含ObjectAL音频库,可以回放音效和音乐. ObjectAL是一个建立在低级别OpenAL API上的库.OpenAL最擅长被用来播放短的音效(.wav,.caf,.aiff),并 ...

  5. iOS中关于UIApplication的详细介绍

    UIApplication 什么是UIApplication? UIApplication对象是应用程序的象征.每一个应用都有自己的UIApplication对象,这个对象是系统自动帮我们创建的, 它 ...

  6. Global Financial Applications uses the following Public tables

    来自文档: Oracle  Financial Applications Technical Reference Manual  更多明细参考文档 Table Name                 ...

  7. 使用IO映射的方式获取tiny4412板子上的ID号

    在以前的文章中,有一篇 基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号 在那篇文章中,具体可以参考.那时候我使用了简单的字符设备驱动框架,最终的ID号通过read方法可将 ...

  8. Struct和Union在内存大小上的区别

    名字起的不好,但是也不知道该叫什么好,题目如下: typedef union {];char c;} DATE; struct data { int i; DATE k; double j; }; i ...

  9. unix下的ACL

    acl可以针对user,组,目录默认属性(mask)来控制. acl需要文件系统支持,ext2/3,jfs,xfs等都支持. getfacl setfacl 对于mac os X系统的acl 可以使用 ...

  10. mongodb3.6 (五)net 客户端访问mongodb设置超时时间踩过的“坑”

    前言 在上一篇文章中,我们有提到net访问mongodb连接超时默认为30秒,这个时间在实际项目中肯定是太长的.而MongoClientSettings 也确是提供了超时属性,如下图: 可实际使用中, ...