修改Tomcat Connector运行模式,优化Tomcat运行性能

omcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一。不过,许多开发人员不知道的是,Tomcat
Connector(Tomcat连接器)有bio、nio、apr三种运行模式,那么这三种运行模式有什么区别呢,我们又如何修改Tomcat
Connector的运行模式来提高Tomcat的运行性能呢?

下面,我们先大致了解Tomcat Connector的三种运行模式。

bio

bio(blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。Tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat
Manager来查看服务器的当前状态。【点击这里可以查看Tomcat Manager用户配置的相关信息】

nio

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文件中将如下配置:

<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" />

此时,我们就可以在Tomcat Manager中看到当前服务器状态页面的HTTP协议的Connector运行模式已经从http-bio-8080变成了http-nio-8080

apr

apr(Apache Portable Runtime/Apache可移植运行时),是Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。如果我们的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直接使用即可。

此外,即使不使用Tomcat Manager,我们也可以区分出Tomcat当前的运行模式。如果以不同的Connector模式启动,在Tomcat的启动日志信息中一般会包含类似如下的不同内容,我们只需要根据这些信息即可判断出当前Tomcat的运行模式:

bio
信息: Starting ProtocolHandler ["http-bio-8080"] 2013-8-6 16:17:50 org.apache.coyote.AbstractProtocol start
nio
信息: Starting ProtocolHandler ["http-nio-8080"] 2013-8-6 16:59:53 org.apache.coyote.AbstractProtocol start
apr
信息: Starting ProtocolHandler ["http-apr-8080"] 2013-8-6 17:03:07 org.apache.coyote.AbstractProtocol start
Tomcat 6.x版本从6.0.32开始就默认支持apr。
Tomcat 7.x版本从7.0.30开始就默认支持apr。
因此,如果读者使用的Tomcat版本比较陈旧的话,强烈建议升级到最新的稳定版本。
时间: 2024-09-23 21:17:06

修改Tomcat Connector运行模式,优化Tomcat运行性能的相关文章

Java魔法堂:JVM的运行模式 (转)

  一.前言   JVM有Client和Server两种运行模式.不同的模式对应不同的应用场景,而JVM也会有相应的优化.本文将记录JVM模式的信息,以便日后查阅.   二.介绍   在$JAVA_HOME/jre/bin下有client目录,分别代表JVM的两种运行模式.   client运行模式,针对桌面应用,加载速度比server模式快10%,而运行速度为server模式的10分之一.client下默认的堆容量 -Xms1M -Xmx64M   server运行模式,针对服务器应用.ser

Java魔法堂:JVM的运行模式

一.前言   JVM有Client和Server两种运行模式.不同的模式对应不同的应用场景,而JVM也会有相应的优化.本文将记录JVM模式的信息,以便日后查阅.   二.介绍   在$JAVA_HOME/jre/bin下有client和server两个目录,分别代表JVM的两种运行模式.   client运行模式,针对桌面应用,加载速度比server模式快10%,而运行速度为server模式的10分之一.client下默认的堆容量 -Xms1M -Xmx64M   server运行模式,针对服务

PHP运行模式汇总_php技巧

PHP运行模式有4钟: 1)cgi 通用网关接口(Common Gateway Interface)) 2) fast-cgi 常驻 (long-live) 型的 CGI 3) cli  命令行运行   (Command Line Interface) 4)web模块模式 (apache等web服务器运行的模块模式) 5)ISAPI(Internet Server Application Program Interface) 备注:在PHP5.3以后,PHP不再有ISAPI模式,安装后也不再有p

PHP 5大运行模式

做 php 开发的应该都知道 php 运行模式概念吧,本文将要和大家分享的是关于php目前比较常见的五大运行模式:包括cgi .fast-cgi.cli.isapi.apache模块的DLL ,下面作者就这五大运行模式做一些自己的分析,有不对的地方,还请留言指正. CGI运行模式 CGI即通用网关接口(Common Gateway Interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行

一台机器同时部署运行多个Tomcat

#######################一台机器同时部署运行多个Tomcat ############################### 注:下文介绍为两个tpmcat,前提jdk已经安装完成! 环境:apache-tomcat-8.0.24.tar.gz             CentOS release 6.5 (Final) 1:使用免安装的tomcat安装包(解压即可使用),官方下载:http://tomcat.apache.org/ 2:直接解压tomcat安装包就可以使用

y clipse-MyEclipse2014部署tomcat项目无法手动启动tomcat运行项目

问题描述 MyEclipse2014部署tomcat项目无法手动启动tomcat运行项目 我在本地写了一个项目,然后用MyEclipse2014部署在tomcat上面正常运行,但是我在MyEclipse里面关闭tomcat之后把tomcat安装目录下面的webapps对应的项目整体上传到了远程服务器上面,发现无法找到项目.而且在本地计算机服务中手动启动tomcat发现本地项目也是无法找到,但是webapps文件夹里面的确存在!问一下这个是什么原因,如何才能部署成功? 解决方案 是不是你的tomc

java-Jboss服务器运行原理和tomcat的区别

问题描述 Jboss服务器运行原理和tomcat的区别 没用过Jboss服务器,想了解一下它的运行原理和Tomcat服务的区别? 解决方案 单作为web容器来说启动原理是一样的...

Tomcat 7优化前及优化后的性能对比

一.运行环境 CPU: Intel(R) Pentium(R) P6200@2.13GHz : 内存:4G,装的是32位win7,只认出3G,没有花时间去整ramdisk之类的东西: 操作系统:win7 32位: JDK:1.7.0_55 Tomcat:7.0.53 大家不要笑,公司电脑,就给配这样的,慢的要死,悲剧! 下面所有测试都是基于1000个请求做的,且都是访问Tomcat默认的ROOT首页 二.未调优前 并发用户数从10-1000挨个测试,测试结果如下: 从上面的测试结果来看,除去20

ubuntu下面的apache2用JK模式整合tomcat后tomcat的Jsp显示404找不到

问题描述 ubuntu下面的apache2用JK模式整合tomcat后tomcat的Jsp显示404找不到 我是使用Jk的连接方式修改了几个文件 1. /etc/libapache2-mod-jk/workers.properties下的文件 改了以下内容 workers.tomcat_home=/root/tomcat8 workers.java_home=/usr/local/jdk8 ps=/ worker.list=ajp13_worker,jk-status,jk-manager wo