Tomcat Connector 运行模式

Linux系统 gongyj 681℃ 已收录 0评论

Tomcat 是一个小型的轻量级应用服务器,也是 JavaEE 开发人员最常用的服务器之一。不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有 bio、nio、apr 三种运行模式,那么这三种运行模式有什么区别呢,我们又如何修改 Tomcat Connector 的运行模式来提高 Tomcat 的运行性能呢?修改他们的运行模式,3 种模式的运行是否成功,可以看他的启动控制台,或者启动日志,或者登录他们的默认页面 http://localhost:8080 查看其中的服务器状态。

first.png

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

bio

bio(blocking I/O),顾名思义,即阻塞式 I/O 操作,表示 Tomcat 使用的是传统的 Java I/O 操作(即java.io包及其子包)。Tomcat 在默认情况下,就是以 bio 模式运行的,没有经过任何优化处理和支持。遗憾的是,就一般而言,bio 模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager 来查看服务器的当前状态。

bio.png

nio

nio(new I/O),是 Java SE 1.4 及后续版本提供的一种新的 I/O 操作方式(即java.nio包及其子包)。这是用纯 Java 编写的连接器(Conector)的一种可选方法。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。

nio.png

apr

apr(Apache Portable Runtime/Apache可移植运行时),是 Apache HTTP 服务器的支持库。有 C 语言和 JAVA 两种语言实现,连接 Apache httpd Web 服务器的类库是在 C 中实现的,同时用 APR 进行网络通信。你可以简单地理解为,Tomcat 将以 JNI 的形式调用 Apache HTTP 服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高 Tomcat 对静态文件的处理性能,同时如果你使用了 HTTPS 方式传输的话,也可以提升 SSL 的处理性能,提供超强的可伸缩性和性能。
Tomcat apr 也是在 Tomcat 上运行高并发应用的首选模式。如果我们的 Tomcat 不是在 apr 模式下运行,在启动 Tomcat 的时候,我们可以在日志信息中看到类似如下信息:

2015-9-12 13:45:26 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: /usr/java/jdk1.6.0_45/jre/lib/amd64/server:/usr/java/jdk1.6.0_45/jre/lib/amd64:/usr/java/jdk1.6.0_45/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

Tomcat apr 运行模式的配置是三种运行模式之中相对比较麻烦的一种。据官方文档所述,Tomcat apr 需要以下三个组件的支持:

APR library[APR库]

JNI wrappers for APR used by Tomcat(libtcnative)[简单地说,如果是在 Linux 操作系统上,就是 apr 与 apr-devel,如果是在Windows操作系统上,就是一个名为 tcnative-1.dll 的动态链接库文件 ]。

OpenSSL libraries[OpenSSL库]

此外,与配置 nio 运行模式差不多,既可以把对应的 Connector 节点的 protocol 属性值改为 org.apache.coyote.http11.Http11AprProtocol,也可以什么都不改,只将 tomcat-native 和 apr 包都安装号,就可以自动启用了。

apr.png

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

bio

信息: Starting ProtocolHandler ["http-bio-8080"] 2015-9-12 13:49:42 org.apache.coyote.AbstractProtocol start

nio

信息: Starting ProtocolHandler ["http-nio-8080"] 2015-9-12 13:59:54 org.apache.coyote.AbstractProtocol start

apr

信息: Starting ProtocolHandler ["http-apr-8080"] 2015-9-12 14:23:11 org.apache.coyote.AbstractProtocol start

因此,如果正在使用的 Tomcat 版本比较陈旧的话,强烈建议升级到比较新的稳定版本,性能可以得到很大的提升。


本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:http://blog.chopmoon.com/favorites/216.html
喜欢 (0)
发表我的评论
取消评论

表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
正在加载中……