精华内容
下载资源
问答
  • tomcat三种运行模式
    千次阅读
    2019-07-05 11:27:43

    一、导读

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

    二、模式介绍

    1. bio

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

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


    中的protocol属性值改为org.apache.coyote.http11.Http11NioProtocol即可:


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

    1. 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版本比较陈旧的话,强烈建议升级到最新的稳定版本。

    更多相关内容
  • 主要介绍了浅谈Tomcat三种运行模式,小编冒昧将两篇文章略微整合了一下,有不足的地方,欢迎指出。需要的朋友可以参考。
  • 10.3Tomcat三种工作模式介绍.txt
  • tomcat三种工作模式

    千次阅读 2019-06-12 11:28:08
    Tomcat 的连接器有两:HTTP和AJP AJP(Apache JServ Protocol):AJP是面向数据包的基于TCP/IP的协议,它在Apache和Tomcat的实例之间提供了一个专用的通信信道 主要有以下特征: 1) 在快速网络有着较好的性能...

    Tomcat 的连接器有两种:HTTP和AJP

    AJP(Apache JServ Protocol):AJP是面向数据包的基于TCP/IP的协议,它在Apache和Tomcat的实例之间提供了一个专用的通信信道

    主要有以下特征:

    1. 1) 在快速网络有着较好的性能表现,支持数据压缩传输;

    2. 2) 支持SSL,加密及客户端证书;

    3. 3) 支持Tomcat实例集群;

    4. 4) 支持在apache和tomcat之间的连接的重用;

    5.  

      Tomcat Connector(连接器)有三种运行模式:bio nio apr

      一、bio(blocking I/O)

      即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。是基于JAVA的HTTP/1.1连接器,Tomcat7以下版本在默认情况下是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。(Tomcat7 或以下,在 Linux 系统中默认使用这种方式)

      一个线程处理一个请求,缺点:并发量高时,线程数较多,浪费资源

      server.xml 文件中的配置

      端口号自己设定,只要不占用就行,此处我的8080 已占用所以使用9090

       
    6. <Connector port="9090" protocol="HTTP/1.1"

    7. connectionTimeout="20000"

    8. redirectPort="8443" />

    9. 1
    10. 2
    11. 3
    12. 4
    13. 这里写图片描述

      Tomcat Manager查看到的

      这里写图片描述

      二、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 中将对应的中protocol的属性值改为 org.apache.coyote.http11.Http11NioProtocol即可

      利用 Java 的异步请求 IO 处理,可以通过少量的线程处理大量的请求

      注意: Tomcat8 以上版本在 Linux 系统中,默认使用的就是NIO模式,不需要额外修改 ,Tomcat7必须修改Connector配置来启动

       
    14. <Connector port="9090" protocol="org.apache.coyote.http11.Http11NioProtocol"

    15. connectionTimeout="20000"

    16. redirectPort="8443" />

    17. 1
    18. 2
    19. 3
    20. server.xml 文件中的修改

      这里写图片描述

      Tomcat Manager查看到的

      这里写图片描述

      三、apr(Apache Portable Runtime/Apache可移植运行时) ( 安装配置过程相对复杂)

      Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。Tomcat apr也是在Tomcat上运行高并发应用的首选模式。从操作系统级别来解决异步的IO问题

      APR是使用原生C语言编写的非堵塞I/O,利用了操作系统的网络连接功能,速度很快。 
      但是需先安装apr和native,若直接启动就支持apr,能大幅度提升性能,不亚于魔兽开局爆高科技兵种,威力强大

      Tomcat apr的配置需要以下三个组件的支持:

       
    21. APR library

    22. JNI wrappers for APR used by Tomcat(libtcnative)[简单地说,就是自带的tomcat-native]

    23.  
    24. OpenSSL libraries

    25. 1
    26. 2
    27. 3
    28. 4
    29. 5
    30. 与配置nio运行模式一样,也需要将对应Connector的protocol属性值改为 org.apache.coyote.http11.Http11AprProtocol

      server.xml 文件中的配置

       
    31. <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"

    32. URIEncoding="UTF-8"

    33. maxConnections="10000"

    34. maxThreads="2000"

    35. acceptCount="2000"

    36. minSpareThreads="100"

    37. compression="on"

    38. compressionMinSize="2048"

    39. compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

    40. enableLookups="false"

    41. disableUploadTimeout="true"

    42. connectionTimeout="20000"

    43. redirectPort="8443" />

    44. 1
    45. 2
    46. 3
    47. 4
    48. 5
    49. 6
    50. 7
    51. 8
    52. 9
    53. 10
    54. 配置之前首先

      安装APR以及与 Tomcat-native 整合(之前先安装依赖)

      APR及APR依赖的下载

      APR下载:http://apr.apache.org/download.cgi
    55. 1
    56. ①安装apr

       
    57. 1 在目录/opt/apr/apr-1.5.2 下执行

    58. ./configure --prefix=/usr/local/apr

    59.  
    60. 2 make

    61.  
    62. 3 make install

    63. 1
    64. 2
    65. 3
    66. 4
    67. 5
    68. 6
    69. 7
    70. ② 安装 apr-iconv

       
    71. 1 /opt/apr/apr-iconv-1.2.1

    72. ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr

    73.  
    74. 2 make

    75.  
    76. 3 make install

    77. 1
    78. 2
    79. 3
    80. 4
    81. 5
    82. 6
    83. 7
    84. ③ 安装apr-util

       
    85. 1 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv

    86.  
    87. 2 make

    88.  
    89. 3 make install

    90. 1
    91. 2
    92. 3
    93. 4
    94. 5
    95. 6
    96. ④安装tomcat-native 
      这里写图片描述

      这里写图片描述

       
    97. 2 ./configure --with-apr=/usr/local/apr

    98. make

    99. make install

    100. ⑤ 配置APR的环境变量

    101. vim /opt/tomcat7/bin/catalina.sh

    102.  
    103. 编辑添加如下内容

    104.  
    105. 以下内容粘在开头(表示一启动就执行)

    106.  
    107. LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib export LD_LIBRARY_PATH

    108.  
    109. ⑥重启Tomcat 查看日志 
      这里写图片描述

      ⑦ 粘贴便签内配置

    110. <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"

    111. URIEncoding="UTF-8"

    112. maxConnections="10000"

    113. maxThreads="2000"

    114. acceptCount="2000"

    115. minSpareThreads="100"

    116. compression="on"

    117. compressionMinSize="2048"

    118. compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

    119. enableLookups="false"

    120. disableUploadTimeout="true"

    121. connectionTimeout="20000"

    122. redirectPort="8443" />

    123. Tomcat Manager查看到的

      这里写图片描述

      * 待解决问题 *

      Tomcat在server.xml 文件中配置 APR 协议出现以下

      出现问题待解决 

    124. 二月 08, 2017 4:53:21 下午 org.apache.catalina.core.StandardService initInternal

    125. 严重: Failed to initialize connector [Connector[HTTP/1.1-9000]]

    126. org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-9000]]

    127. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)

    128. at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560)

    129. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)

    130. at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:840)

    131. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)

    132. at org.apache.catalina.startup.Catalina.load(Catalina.java:642)

    133. at org.apache.catalina.startup.Catalina.load(Catalina.java:667)

    134. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    135. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

    136. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    137. at java.lang.reflect.Method.invoke(Method.java:606)

    138. at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)

    139. at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)

    140. Caused by: org.apache.catalina.LifecycleException: The configured protocol [org.apache.coyote.http11.Http11AprProtocol] requires the APR/native library which is not available

    141. at org.apache.catalina.connector.Connector.initInternal(Connector.java:972)

    142. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)

    143. ... 12 more

    144.  
    展开全文
  • tomcat三种运行模式

    千次阅读 2019-02-19 11:08:49
    不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式,那么这三种运行模式有什么区别呢,我们又如何修改Tomcat Connector的运行模式来提高Tomcat的运行性能呢? 下面,我们...

    Tomcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一。不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bionioapr三种运行模式,那么这三种运行模式有什么区别呢,我们又如何修改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版本比较陈旧的话,强烈建议升级到最新的稳定版本。
    展开全文
  • Tomcat三种运行模式

    千次阅读 2018-09-09 11:00:00
    Tomcat支持三种接收请求的处理方式:BIO,NIO,APRBIO模式:阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即:java.io包...

    Tomcat支持三种接收请求的处理方式: BIONIOAPR

    BIO模式: 阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即:java.io包及其子包);Tomcat 7以下版本默认情况下是以BIO模式运行的,由于每个请求的都要创建一个线程来处理,因此 线程的开销较大,不能处理高兵的场景,在三种模式中性能也最低效;启动Tomcat看日志如下表示为BIO模式:

    NIO模式: 是Java SE 1.4以后续版本提供的一种新的I/O操作方式(即:java.nio包及其子包);是一个基于 缓存区、并提供非阻塞I/O操作的Java API,它拥有比传统的I/O操作(BIO)更好的并发运行性能;

    APR模式: 简单理解就是,从操作系统级别解决异步IO问题,大幅度的提高服务器的处理合相应性能,也是Tomcat运行高并发应用的首选模式;

    官方对三种运行模式的区别说明如下:

    参数Java Blocking Connector (BIO模式)Java Nio Blocking Connector(NIO模式)APR/native Connector(APR模式)
    classnameAjpProtocolAjpNioProtocolAjpAprProtocol
    Tomcat Version3.x onwards7.x onwards5.5.x onwards
    Support PollingNOYESYES
    Polling SizeN/AmaxConnectionsmaxConnections
    Read Request HeadersBlockingSim BlockingBlocking
    Read Request BodyBlockingSim BlockingBlocking
    Write ResponseBlockingSim BlockingBlocking
    Wait for next RequestBlockingNon BlockingNon Blocking
    Max ConnectionsmaxConnectionsmaxConnectionsmaxConnections

    特征 

    模式默认运行版本处理方式
    BIO运行模式Tomcat7或以下版本一个线程处理一个请求;缺点:并发量高是,线程数较多,浪费资源
    NIO运行模式Tomcat8版本利用Java的异步IO处理,可通过少量的线程处理大量请求;
    APR运行模式Tomcat7 或 8 在win7或以上系统中默认使用从操作系统层面解决IO阻塞问题;


    Tomcat启动时,可以通过 catalina.out启动日志查看使用的是哪种运行模式:

    Starting ProtocolHandler ["http-bio-8080"] ## BIO模式	
    Starting ProtocolHandler ["http-nio-8080"] ## NIO模式	
    Starting ProtocolHandler ["http-apr-8080"] ## APR模式

    Tomcat BIO模式

    自Tomcat 8.5 版本开始,Tomcat就移除了对BIO的支持; BIO即阻塞式I/O,是java提供的最基本的I/O方式。在网络通信(此处主要讨论TCP/IP协议)中,需要通过Socket在客户端与服务端建立双向链接以实现通信,主要步骤如下:

    • (1) 服务端监听某个端口是否有链接请求

    • (2) 客户端想服务端发出链接请求

    • (3) 服务端想客户端返回Accept(接受)消息,此时链接成功

    • (4) 客户端和服务端通过send()、write()等方法与对方通信

    • (5) 关闭链接

    Tomcat 7以下版本默认情况下是以BIO模式运行的,由于每个请求的都要创建一个线程来处理,因此 线程的开销较大,不能处理高并发的场景,在三种模式中性能也最低效;启动Tomcat看日志如下表示为BIO模式:

    640

    Tomcat NIO模式

    重要提示:使用这些功能需要使用APR或NIO HTTP连接器。传统的java.io HTTP连接器和AJP连接器不支持它们

    传统的BIO方式是基于流进行读写的,而且是阻塞的,整体性能比较差; 为了提供I/O性能,JDK自1.4版本引入了NIO模式,它弥补了原来BIO方式的不足,在标准的java代码中提供了 高速、面向块的I/O。 通过定义包含数据的类以及以块的形式处理数据,NIO可以在不编写本地代码的情况下利用底层优化,这是BIO所无法做到的;

    NIO模式 是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行比较简单,只需要在Tomcat安装目录/conf/server.xml文件中将如下配置:

    &lt;Connector port="8080" protocol="HTTP/1.1"	
    connectionTimeout="20000"	
    redirectPort="8443" /&gt;

    修改成:

    &lt;Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"	
    connectionTimeout="20000"	
    redirectPort="8443" /&gt;

    注意: Tomcat8以上版本,默认使用的就是NIO模式;不需要额外修改

    640

    提示: 更改模式时,如果只修改上述文件内容,则只有 ["http-nio-8180"]被修改为NIO模式,若想上图中2处都修改为 NIO模式则还需要修改如下内容:

    &lt;Connector port="8109" protocol="AJP/1.3" redirectPort="8443" /&gt; 

    改为:

    &lt;Connector port="8109" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443" /&gt;

    以下属性是特定于NIO连接器 NIO连接器官方详细说明

    640

    Tomcat NIO2模式

    NIO2是JDK7新增的文件及网络I/O特性,它继承自NIO 同时添加了众多特性及功能改进,其中最重要的即是对异步I/O(AIO)的支持;

    • 1 . 通道 在AIO中,通道必须实现接口 java.nio.chanels.AsynchronousChannel(继承自java.nio.channels.Channel JDK7提供了3个通道实现类: java.nio.channels.AsynchronousFileChannel用于文件I/O, java.nio.channels.AsynchronousServerSocketChannel 和 java.nio.channels.AsynchronousSocketChannel用于网络I/O

    • 2 . 缓冲区 AIO仍通过操作缓冲区完成数据的读写操作,这里不再阐述。

    • 3 . Future 和 CompletionHandler AIO操作存在两种操作方式: Future 和 CompletionHandler ; 我们可以使用其中任何一种来完成I/O操作 首先, AIO使用了java并发包的API,无论接收Socket请求还是读写操作,均可以返回一个java.util.concurrent.Future对象来表示I/O处于等待状态; 通过Future的方法,我们可以检测操作是否完成(isDone)、等待完成并取得操作结果(get)等。 当接收请求(accept)结束时,Future.get返回值为AsynchronousSocketChannel; 读写操作时(read/write),Future.get返回值为读写操作结果。

    • 4 . 异步通道组 AIO新引入了异步通道组(Asynchronous Channel Group)的概念,每个异步通道均属于一个指定的异步通道组,同一个通道组内的通道共享一个线程池; 线程池内的线程接收指令来执行I/O事件并将结果分发到CompletionHandler。 异步通道组包括线程池以及所有通道工作线程共享的资源。通道生命周期受所属通道组影响,当通道组关闭后,通道也随之关闭;

    Tomcat APR模式

    • APR模式:简单来说,就是从操作系统级别解决异步IP问题,大幅度的提高服务器的处理和响应性能,也是Tomcat运行高并发应用的首选模式;

    • 启动这种模式需要安装一些依赖库,下面进行详细说明:

    基于Apache Portable Runtime(APR)的Tomcat本地库

    安装要求:

    • APR 1.2+开发头文件(libapr1-dev包)

    • OpenSSL 0.9.7+开发头文件(libssl-dev包)

    • 来自Java兼容JDK 1.4+的JNI头文件

    • GNU开发环境(gcc,make)

    apr的安装

    下载apr包地址(http://apache.fayea.com/apr/)

    ## 下载解压	
    wget http://apache.fayea.com/apr/apr-1.6.3.tar.gz	
    wget http://apache.fayea.com/apr/apr-util-1.6.1.tar.gz	
    tar fxz apr-1.6.3.tar.gz 	
    tar fxz apr-util-1.6.1.tar.gz 	
    	
    ## 安装	
    cd apr-1.6.3/	
    ./configure --prefix=/usr/local/apr	
    make &amp;&amp; make install	
    	
    cd apr-util-1.6.1/	
    ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr	
    make &amp;&amp; make install

    安装tomcat-native

    cd /usr/local/tomcat/bin tar -zxvf tomcat-native.tar.gz	
    cd tomcat-native-1.1.22-src/jni/native	
    ./configure --with-apr=/usr/local/apr	
    make &amp;&amp; make install

    设置apr环境变量

    # vim /etc/profile	
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib	
    	
    # 执行 source /etc/profile 立即生效

    修改Tomcat配置文件

    修改http协议

    &lt;Connector port="8080" protocol="HTTP/1.1"	
    connectionTimeout="20000"	
    redirectPort="8443" /&gt;

    修改成:

    &lt;Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"	
    connectionTimeout="20000"	
    redirectPort="8443" /&gt;

    修改AJP协议

    &lt;Connector port="8109" protocol="AJP/1.3" redirectPort="8443" /&gt;

    改为:

    &lt;Connector port="8109" protocol="org.apache.coyote.http11.Http11AprProtocol" redirectPort="8443" /&gt;

    总结

    对于每种协议,Tomcat都提供了对应的I/O方式的实现,而且Tomcat官方还提供了在每种协议下每种I/O实现方案的差异; HTTP协议下的处理方式如下表:


    NIONIO2APR
    引用版本≥6.0≥8.0≥5.5
    轮询支持
    轮询队列大小maxConnectionsmaxConnectionsmaxConnections
    读请求头非阻塞非阻塞非阻塞
    读请求体阻塞阻塞阻塞
    写响应阻塞阻塞阻塞
    等待新请求非阻塞非阻塞非阻塞
    SSL支持Java SSL/Open SSLJava SSL/Open SSLOpen SSL
    SSL握手非阻塞非阻塞阻塞
    最大链接数maxConnectionsmaxConnectionsmaxConnections

    展开全文
  • 主要介绍了解决tomcat在Debug模式下无法启动问题,运行环境在eclipse,JDK1.6,tomcat6.0上,具体问题解决方法大家参考下本
  • 简介:这个分为两个部分的系列文章将研究ApacheTomcat的系统架构以及其运用的很多经典设计模式。本文是第1部分,将主要从Tomcat如何分发请求、如何处理多用户同时请求,还有它的多级容器是如何协调工作的角度来分析...
  • Tomcat三种模式及并发优化Tomcat三种模式及并发优化
  • debug模式启动tomcat

    2017-08-28 17:03:06
    放到tomcat的bin下启动,端口号8013
  • Tomcat8.0起已经默认nio模式,不需要做修改,BIO模式也已经抛弃了,今天主要介绍下tomcat三种运行模式:BIO、NIO、ARP。 简述及配置运行模式 1、bio:没经过任何优化和处理,几百并发性能极低下。 配置server.xml ...
  • 主要介绍了IDEA Maven项目使用debug模式运行Tomcat的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • Tomcat三种运行模式(BIO, NIO, APR)

    千次阅读 2017-07-10 15:23:37
    Tomcat三种运行模式(BIO, NIO, APR)**Tomcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用 的服务器之一。不过,许多开发人员不知道的是,Tomcat Connector (Tomcat连接器)有bio、nio、apr三种运行...
  • Tomcat三种模式区别及配置

    千次阅读 2017-05-22 14:19:34
    Tomcat的运行模式有3,即BIO、NIO和APR。 BIO   一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。 NIO  利用Java的异步IO处理,...
  • 主要介绍了vue-cli history模式实现tomcat部署报404的解决方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了从连接器组件看Tomcat的线程模型——BIO模式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • Tomcat Connector的三种运行模式

    千次阅读 2016-12-02 20:17:37
    Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式。BIObio(blocking I/O)是指阻塞式I/O操作,Tomcat在默认情况下就是以bio模式运行的。这可以从守护线程的信息看出来。 关于”阻塞式”的理解,我们回忆...
  • 本文以 Tomcat 5 为基础,也兼顾最新的 Tomcat 6 和 Tomcat 4。Tomcat 的基本设计思路和架构是具有一定连续性的。 Tomcat 总体结构 Tomcat 的结构很复杂,但是 Tomcat 也非常的模块化,找到了 Tomcat 最核心的模块...
  • tomcat 三种连接模式

    千次阅读 2014-05-26 23:19:25
    tomcat 三种模式
  • tomcat的运行模式

    2015-09-17 11:13:26
    描述tomcat三种运行模式,以及其相应的配置方法
  • Tomcat 系统架构与设计模式,第 1 部分 工作原理
  • Tomcat部署Vue router History 模式

    千次阅读 2022-01-28 13:37:31
    部署有两方式: 访问地址为IP+端口,如 http://192.168.1.xx:8080,此时router形式为 http://192.168.1.xx:8080/user 访问地址为IP+端口+项目名,如 http://192.168.1.xx:8080/app,此时router形式为 ...
  • Tomcat面试专题.pdf

    2021-08-13 09:54:07
    1、Tomcat 的缺省端口是多少,怎么修改? 2、tomcat 有哪几 Connector 运行模式(优化)? 3、Tomcat 有几部署方式? 4、tomcat 容器是如何创建 servlet 类实例?用到了什么原理?...14.Tomcat 工作模式
  • Tomcat的开发模式和生产模式

    千次阅读 2018-05-19 10:35:26
    tomcat的开发模式和生产模式的设定是通过conf文件夹下面的web.xml文件来配置的。如下图所示。development参数为true时,tomcat为开发模式,这也是tomcat默认的模式,development参数为false时,tomcat为生产模式。在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 200,889
精华内容 80,355
关键字:

tomcat三种工作模式