zoukankan      html  css  js  c++  java
  • Tomcat 的三种高级运行模式

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

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

    主要有以下特征:

     1) 在快速网络有着较好的性能表现,支持数据压缩传输;
    
     2) 支持SSL,加密及客户端证书;
    
     3) 支持Tomcat实例集群;
    
     4) 支持在apache和tomcat之间的连接的重用;
    

    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

    <Connector port="9090" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    

    这里写图片描述

    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配置来启动

    <Connector port="9090" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   connectionTimeout="20000"
                   redirectPort="8443" />

    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的配置需要以下三个组件的支持:

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

    与配置nio运行模式一样,也需要将对应Connector的protocol属性值改为 org.apache.coyote.http11.Http11AprProtocol

    server.xml 文件中的配置

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
    URIEncoding="UTF-8"
    maxConnections="10000"
    maxThreads="2000"
    acceptCount="2000"
    minSpareThreads="100"
    compression="on"
    compressionMinSize="2048"
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
    enableLookups="false"
    disableUploadTimeout="true"
    connectionTimeout="20000"
    redirectPort="8443" />

    配置之前首先

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

    APR及APR依赖的下载

    APR下载:http://apr.apache.org/download.cgi

    ①安装apr

    1 在目录/opt/apr/apr-1.5.2 下执行
     ./configure --prefix=/usr/local/apr
    
    2 make
    
    3 make install
    

    ② 安装 apr-iconv

     1  /opt/apr/apr-iconv-1.2.1
       ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
    
    2 make
    
    3 make install
    

    ③ 安装apr-util

    1 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
    
    2 make
    
    3 make install
    

    ④安装tomcat-native
    这里写图片描述

    这里写图片描述
    这里写图片描述

    2 ./configure --with-apr=/usr/local/apr
     make
     make install

    ⑤ 配置APR的环境变量

    vim /opt/tomcat7/bin/catalina.sh
    
    编辑添加如下内容
    
    以下内容粘在开头(表示一启动就执行)
    
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib export LD_LIBRARY_PATH
    

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

    ⑦ 粘贴便签内配置

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
    URIEncoding="UTF-8"
    maxConnections="10000"
    maxThreads="2000"
    acceptCount="2000"
    minSpareThreads="100"
    compression="on"
    compressionMinSize="2048"
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
    enableLookups="false"
    disableUploadTimeout="true"
    connectionTimeout="20000"
    redirectPort="8443" />

    Tomcat Manager查看到的

    这里写图片描述

    * 待解决问题 *

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

    出现问题待解决
    这里写图片描述

    二月 08, 2017 4:53:21 下午 org.apache.catalina.core.StandardService initInternal
    严重: Failed to initialize connector [Connector[HTTP/1.1-9000]]
    org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-9000]]
            at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
            at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560)
            at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
            at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:840)
            at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
            at org.apache.catalina.startup.Catalina.load(Catalina.java:642)
            at org.apache.catalina.startup.Catalina.load(Catalina.java:667)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:606)
            at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)
            at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
    Caused by: org.apache.catalina.LifecycleException: The configured protocol [org.apache.coyote.http11.Http11AprProtocol] requires the APR/native library which is not available
            at org.apache.catalina.connector.Connector.initInternal(Connector.java:972)
            at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
            ... 12 more
    
    
  • 相关阅读:
    Why Choose Jetty?
    Jetty 的工作原理以及与 Tomcat 的比较
    Tomcat设计模式
    Servlet 工作原理解析
    Tomcat 系统架构
    spring boot 打包方式 spring boot 整合mybaits REST services
    wireshark udp 序列号 User Datagram Protocol UDP
    Maven 的聚合(多模块)和 Parent 继承
    缓存策略 半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完全自动化的框架我更喜欢mybatis
    Mybatis解决sql中like通配符模糊匹配 构造方法覆盖 mybits 增删改
  • 原文地址:https://www.cnblogs.com/jpfss/p/9257309.html
Copyright © 2011-2022 走看看