Tomcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最经常使用的服务器之一。不过,许多开发人员不知道的是,Tomcat Connector(Tomcat链接器)有bio、nio、apr三种运行模式,那么这三种运行模式有什么区别呢,咱们又如何修改Tomcat Connector的运行模式来提升Tomcat的运行性能呢?java
下面,咱们先大体了解Tomcat Connector的三种运行模式。python
bio(blocking I/O),顾名思义,即阻塞式I/O操做,表示Tomcat使用的是传统的Java I/O操做(即java.io
包及其子包)。Tomcat在默认状况下,就是以bio模式运行的。遗憾的是,就通常而言,bio模式是三种运行模式中性能最低的一种。咱们能够经过Tomcat Manager来查看服务器的当前状态。linux
nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操做方式(即java.nio
包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操做的Java API,所以nio也被当作是non-blocking I/O
的缩写。它拥有比传统I/O操做(bio)更好的并发运行性能。要让Tomcat以nio模式来运行也比较简单,咱们只须要在Tomcat安装目录/conf/server.xml
文件中将以下配置:apache
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
中的protocol属性值改成org.apache.coyote.http11.Http11NioProtocol
便可:json
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
此时,咱们就能够在Tomcat Manager中看到当前服务器状态页面的HTTP协议的Connector运行模式已经从http-bio-8080
变成了http-nio-8080
。ubuntu
apr(Apache Portable Runtime/Apache可移植运行时),是Apache HTTP服务器的支持库。你能够简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态连接库来处理文件读取或网络传输操做,从而大大地提升Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。若是咱们的Tomcat不是在apr模式下运行,在启动Tomcat的时候,咱们能够在日志信息中看到相似以下信息:windows
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(这里是路径信息)
此外,与配置nio运行模式同样,也须要将对应的Connector
节点的protocol
属性值改成org.apache.coyote.http11.Http11AprProtocol
。 不过,上述繁琐的操做都是Tomcat 7.0.30以前的版本才须要这样配置,从Tomcat 7.0.30版本开始,Tomcat已经自带了tcnative-1.dll
等文件,而且默认就是在Tomcat apr模式下运行,所以咱们只须要下载最新版本的Tomcat直接使用便可。centos
一 windows下安装
直接拷贝tcnative-1.dll到TOMCAT_HOME/bin目录下,启动便可tomcat
二 linux centos4.8或者ubuntu10.10 server安装服务器
1. 下载包
apr-1.5.2.tar.gz
apr-iconv-1.2.1.tar.gz
apr-util-1.5.4.tar.gz
tomcat-native-1.1.34-src.tar.gz
2. tomcat 、jdk安装(略)
3. 安装apr
tar zxvf apr-1.5.2.tar.gz cd apr-1.5.2 ./configure --prefix=/usr/local/apr make make install
4. 安装apr-iconv
tar -zxvf apr-iconv-1.2.1.tar.gz cd apr-iconv-1.2.1 ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr make make install
5. 安装apr-util
tar zxvf apr-util-1.5.4.tar.gz cd apr-util-1.5.4 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv make make install
6. 安装tomcat-native
tar zxvf tomcat-native-1.1.34-src.tar.gz cd tomcat-native-1.1.34-src/jni/native ./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.7.0_23 make make install
7. 添加环境变量
vi /etc/profile #在他文件末尾处添加下面的变量 # apr export LD_LIBRARY_PATH=/usr/local/apr/lib 执行 source /etc/profile 此时环境变量生效果
8 . 配置tomcat
将对应的Connector
节点的protocol
属性值改成org.apache.coyote.http11.Http11AprProtoc
9. 启动tomcat,就能够看到以下信息,表示配置成功
ul 28, 2017 11:43:06 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent INFO: Loaded APR based Apache Tomcat Native library 1.1.34 using APR version 1.5.2. Jul 28, 2017 11:43:06 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. Jul 28, 2017 11:43:06 AM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["http-apr-8080"] Jul 28, 2017 11:43:06 AM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 965 ms