Tomcat是一个小型的轻量级应用服务器,也是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
文件中将如下配置:
<Connectorport="8080"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
中的protocol属性值改为org.apache.coyote.http11.Http11NioProtocol
即可:
<Connectorport="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的运行模式:
Tomcat 6.x版本从6.0.32开始就默认支持apr。 Tomcat 7.x版本从7.0.30开始就默认支持apr。 因此,如果读者使用的Tomcat版本比较陈旧的话,强烈建议升级到最新的稳定版本。
相关推荐
Tomcat支持多种运行模式,这些模式主要涉及到网络连接的处理方式,不同的模式会影响服务器的性能表现。在本文中,我们将详细介绍Tomcat的三种主要运行模式:BIO(Blocking I/O)、NIO(Non-blocking I/O)和 APR...
【标题】:“Tomcat性能优化”意味着我们正在探讨如何提升Apache Tomcat服务器的运行效率,使其在处理Web应用时能够更快、更稳定地工作。Tomcat是一个开源的Java Servlet容器,广泛用于部署Java Web应用程序。 ...
本文从服务器资源的角度出发,介绍了Tomcat管理员账户配置、服务器间通信协议、运行模式选择、执行器配置以及Connector优化等多个方面的内容。希望这些方法能够帮助开发者们更好地理解和掌握Tomcat性能优化的关键...
服务器Tomcat面试题 SERVER Tomcat 是 Java Web 服务器的开源实现,它提供了 HTTP 服务器、Servlet Container、...Tomcat 的 Connector 运行模式优化参数可以根据实际情况进行调整,以提高 Tomcat 的性能和稳定性。
jakarta-tomcat connector linux环境
Tomcat性能优化 Tomcat 是一个流行的 Java Web 服务器,它的性能优化对网站的并发能力有着至关重要的影响。在本文中,我们将讨论 Tomcat 的性能优化方法,以提高网站的并发能力。 一、目的 通过优化 Tomcat,提高...
本文将围绕“Tomcat7优化与性能调优”的主题,深入探讨优化策略,包括但不限于配置调整、启动模式选择、线程池设置、JVM参数调整等方面。 #### 二、服务器资源考量 服务器所能提供的CPU、内存、硬盘等硬件资源对...
写在前面 Tomcat作为最常用的Java Web服务器,随着并发量越来越...要想运行在该模式下,则直接修改server.xml里的Connector节点,修改protocol为如下配置。 protocol=org.apache.coyote.http11.Http11NioProtocol 重启
【Tomcat7性能优化】 Tomcat7性能优化的目的是提高网站的并发能力,确保服务器能够高效地处理更多用户的请求,从而提升用户体验。优化主要涉及服务器资源的管理和Tomcat的配置调整。 1. 服务器资源 服务器的硬件...
### Tomcat7 性能优化详解 #### 一、引言 随着互联网应用的日益增长,网站并发访问的需求越来越高,而作为一款广泛使用的开源Web容器,Apache Tomcat 的性能优化显得尤为重要。本文将针对Tomcat7进行一系列的性能...
总之,"tomcat_iis_connector"涉及到的是跨平台Web服务器集成技术,需要关注版本兼容性、安装配置、以及后续的性能优化和安全管理。这个过程可能较为复杂,但一旦配置得当,就能充分利用IIS和Tomcat各自的优势,提供...
本资料"Tomcat性能监控和优化.zip"将深入探讨如何有效地管理和提升Tomcat服务器的运行效率。 首先,性能监控是确保Tomcat稳定运行的基础。通过监控,我们可以实时了解Tomcat的CPU使用率、内存消耗、线程状态、请求...
在Tomcat的配置文件中,可以通过调整Connector的参数来优化Tomcat的性能。例如,调整最大连接数、调整工作模式、启用gzip压缩等。同时,也可以通过调整JVM的参数来优化JVM的性能。例如,调整JVM的最大堆大小、调整...
### Tomcat解析与性能优化知识点概述 #### 一、Tomcat基本构成与文件结构 **1. 文件构成** - **1.1 server/shared/common目录** - **Java类库存放位置**:`/server/lib`、`/shared/lib` 和 `/common/lib` 三个...
《Tomcat架构解析与优化》一书主要涵盖了Apache Tomcat服务器的基础架构、工作原理以及性能调优策略。Tomcat作为一款广泛使用的Java Servlet容器,它的高效运行和优化对于任何Java Web应用都至关重要。 首先,...
3. 安装并配置"tomcat_iis_connector",这通常涉及到修改IIS的ISAPI扩展或FastCGI设置,以及Tomcat的Connector配置。 4. 设置Tomcat,确保它可以处理来自IIS的请求,可能需要配置`server.xml`文件中的Connector元素...