tomcat的三种工作模式

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.  

猜你喜欢

转载自blog.csdn.net/qq_36838191/article/details/91492416