tomcat是一个小型的轻量级应用服务器,tomcat Connectors(tomcat 连接器)有bio 、nio、apr三种运行模式,那么这三种模式有什么区别呢,我们又如何修改tomcat connector的运行模式来提高tomcat的运行性能呢
bio
bio(blocking I/O) ,顾名思义,即阻塞式I/O操作,表示tomcat使用的是传统的java I/O操作。tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过tomcat manager 来查看服务器的当前状态。
nio
nio(new I/O),是java SE1.4 及后续版本提供的一种新的I/O操作方式。java nio是一个基于缓冲区、并能提供非阻塞I/O操作的java API。因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O更好的并发性能,要让tomcat以nio模式来运行也比较简单,我们只需在tomcat安装目录下/conf/server.xml文件中将如下配置:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
中的protocol属性值改为org.apache.coyote.http11.Http11NioProtocol
即可:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" /> apr(Apache Portable Runtime/Apache可移植运行时),是Apache HTTP服务器的支持库。你可以简单的理解为,tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大的提高 tomcat对静态文件的处理性能。tomcat apr也是在tomato上运行高并发应用的首选模式。如果我们的tomcat不是在apr模式下运行,在启动tomcat的时候,我们可以在日志信息中看到类似的如下信息:2013-8-6 16:17:49 org.apache.catalina.core.AprLifecycleListener init 信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: xxx/xxx(这里是路径信息)
Tomcat apr运行模式的配置是三种运行模式之中相对比较麻烦的一种。据官方文档所述,Tomcat apr需要以下三个组件的支持:
- APR library[APR库]
- JNI wrappers for APR used by Tomcat (libtcnative)[简单地说,如果是在Windows操作系统上,就是一个名为tcnative-1.dll的动态链接库文件]
- OpenSSL libraries[OpenSSL库]
此外,与配置nio运行模式一样,也需要将对应的Connector
节点的protocol
属性值改为org.apache.coyote.http11.Http11AprProtocol
。不过,上述繁琐的操作都是Tomcat 7.0.30之前的版本才需要这样配置,从Tomcat 7.0.30版本开始,Tomcat已经自带了tcnative-1.dll
等文件,并且默认就是在Tomcat apr模式下运行,因此我们只需要下载最新版本的Tomcat直接使用即可。