Tomcat在Linux服务器上的BIO、NIO、APR模式设置

1、BIO、NIO、AIO

先了解四个概念:java

同步 : 本身亲自出马持银行卡到银行取钱(使用同步IO时,Java本身处理IO读写)。apache

异步 : 委托一小弟拿银行卡到银行取钱,而后给你(使用异步IO时,Java将IO读写委托给OS处理,须要将数据缓冲区地址和大小传给OS(银行卡和密码),OS须要支持异步IO操做API)。编程

阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回)。tomcat

非阻塞 : 柜台取款,取个号,而后坐在椅子上作其它事,等号广播会通知你办理,没到号你就不能去,你能够不断问大堂经理排到了没有,大堂经理若是说还没到你就不能去(使用非阻塞IO时,若是不能读写Java调用会立刻返回,当IO事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成)。服务器

Java对BIO、NIO、AIO的支持:网络

Java BIO : 同步并阻塞,服务器实现模式为一个链接一个线程,即客户端有链接请求时服务器端就须要启动一个线程进行处理,若是这个链接不作任何事情会形成没必要要的线程开销,固然能够经过线程池机制改善。架构

Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的链接请求都会注册到多路复用器上,多路复用器轮询到链接有I/O请求时才启动一个线程进行处理。并发

Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理异步

BIO、NIO、AIO适用场景分析:高并发

BIO方式适用于链接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4之前的惟一选择,但程序直观简单易理解。

NIO方式适用于链接数目多且链接比较短(轻操做)的架构,好比聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

AIO方式使用于链接数目多且链接比较长(重操做)的架构,好比相册服务器,充分调用OS参与并发操做,编程比较复杂,JDK7开始支持。

2、tomcat三种模式简介

BIO
BIO(blocking I/O),顾名思义,即阻塞式I/O操做,表示Tomcat使用的是传统的Java I/O操做(即java.io包及其子包)。Tomcat在默认状况下,就是以bio模式运行的。遗憾的是,就通常而言,bio模式是三种运行模式中性能最低的一种。咱们能够经过Tomcat Manager来查看服务器的当前状态。

NIO 
是Java SE 1.4及后续版本提供的一种新的I/O操做方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操做的Java API,所以nio也被当作是non-blocking I/O的缩写。它拥有比传统I/O操做(bio)更好的并发运行性能。

APR 
(Apache Portable Runtime/Apache可移植运行库),是Apache HTTP服务器的支持库。你能够简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态连接库来处理文件读取或网络传输操做,从而大大地提升Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。

3、tomcat三种模式性能比较

这里我引用了网友给出的测试结果

4、tomcat模式设置

我这里演示的是tomcat7,默认是BIO模式的。而tomcat8是默认NIO模式的。

在这以前,咱们先把tomcat管理界面配置起来,以便等下能更方便的观察咱们的bio、nio、apr 模式(若是不想设置这个,也能够一会查看tomcat的日志文件)

拉到最下面,复制红色框里的内容,在注释外粘贴,添加manager/status用户(这里的用户名请不要改,改了好像就不行了)

配置完重启tomcat,经过ip:port/manager/status 就能够看tomcat状态了,里面有服务器的信息及tomcat信息。

下来就是三种模式的配置步骤:

BIO模式

tomcat7默认就是。若是你是tomcat8或9想设置成BIO模式的,那么在这里修改

找到port=8080端口设置那项,只要红框内是这样的,重启tomcat就会使用BIO模式。tomcat7默认就是这个样子

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

NIO模式

在和设置BIO模式一样的位置上,将红框的内容变成这样,重启tomcat就会使用NIO模式。tomcat8默认就是这个样子

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

APR模式

启用这种模式稍微麻烦一些,须要安装一些依赖库,如下就是安装所需的条件:

  1,最新的apr

  2,最新的apr-util

  3,tomcat-native.tar.gz(在tomcat/bin/下有相应的安装tar包)

不过也须要改配置文件,先来改配置文件吧,仍是在一样的位置,将红框的内容变成这样(注意和NIO模式很像),保存退出,而后去安装依赖库

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

安装那三个依赖前,先看下服务器中有没有装apr

我这里是装过了(好像是tomcat本身装的,不记得了),因此要先卸载,忽略依赖的卸载,从新装最新的

1.apr(http://apr.apache.org/download.cgi),上传解压

安装到/usr/local/apr

./configure --prefix=/usr/local/apr && make && make install

2.apr-util(http://apr.apache.org/download.cgi),上传解压

 

安装到/usr/local/apr-util,指定apr的目录

./configure --with-apr=/usr/local/apr/ --prefix=/usr/local/apr-util && make && make install

 3.tomcat-native(在tomcat/bin/下有相应的安装tar包),解压

安装,指定apr的目录和JAVA_HOME的目录

./tomcat-native-1.2.14-src/native/configure --with-apr=/usr/local/apr --with-java-home=/usr/share/jdk1.8 && make && make install

安装完后记得在 /etc/profile 文件中的JAVA_HOME环境变量后面多加一条APR的环境变量(注意你本身安装的apr目录)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

用source /etc/profile命令让环境变量配置当即生效

启动tomcat,访问(你tomcat所在服务器的ip)192.168.25.128:8080/manager/status,这样就ok了

若是上面你不想设置tomcat管理界面,也能够经过日志查看

相关文章
相关标签/搜索