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

Tomcat Connector 是请求接收环节与请求处理环节的连接器,具体点说,就是将接收到的请求传递给Tomcat WEB容器进行处理。Tomcat可以处理的不同协议的请求,例如HTTP协议、AJP协议。其中AJP是Tomcat与其他Web Server(例如Apache Server、IIS等)连接使用的协议。对于HTTP协议,根据处理Socket中IO的方式的不同,又可以分为BIO、NIO、APR方式。

Tomcat Connector默认配置

HTTP/1.1

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

(一)BIO:(blocking I/O)是指阻塞式I/O操作,Tomcat在默认情况下就是以bio模式运行的。一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。

org.apache.coyote.http11.Http11Protocol

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

(二)NIO/NIO2:(non-blocking I/O)是非阻塞I/O操作。NIO是一个基于缓冲区并能提供非阻塞I/O操作的Java API,它拥有比传统的BIO更好的并发运行性能。利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。

Tomcat7必须修改Connector配置来启动。
org.apache.coyote.http11.Http11NioProtocol

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

Tomcat8以后NIO2模式
org.apache.coyote.http11.Http11Nio2Protocol

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

(三)APR:(Apache Portable Runtime),即Apache可移植运行库,APR的使命是创建和维护一套软件库,以便在不同操作系统(Windows、Linux等)底层实现的基础上提供统一的API,是从操作系统层面解决IO阻塞问题、异步IO问题,大幅度提高服务器的并发处理性能,也是Tomcat生产环境运行的首选方式在apr模式下。Tomcat将以JNI(Java Native Interface)的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大提高Tomcat对静态文件的处理性能。Tomcat apr是在Tomcat上运行高并发应用的首选模式。Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。Linux如果安装了apr和native,Tomcat直接启动就支持APR。
org.apache.coyote.http11.Http11AprProtocol

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

详解 Tomcat 的连接数与线程池:http://www.importnew.com/27309.html

02-24 20:40