zoukankan      html  css  js  c++  java
  • tomcat启动nio,apr详解以及配置

    tomcat启动nio,apr详解以及配置

    前言

    在正文开始之前,我们先在idea工具中看看启动的信息,顺便看下启动的基本信息

    在这里插入图片描述
    在这里插入图片描述
    可以看到信息有
    tomcat版本
    操作系统版本
    java版本
    tomcat 的CATALINA_BASE 和 CATALINA_HOME ,也就是tomcat 的安装版本
    tomcat的jvm大小 等等基本信息
    启动的时候也可以看下信息是否正确来确保你的项目启动没有问题


    好了,正文开始,我们了解一下启动tomcat的日志信息

    一般我们启动 startup.bat 的时候,启动成功会看到如下信息,

    在这里插入图片描述

    在图中我们可以看到,
    【http-nio-8091】
    【ajp-nio-8092】
    这两行表示:
    http 的方式是以nio 的模式来启动的
    ajp 的方式是以nio 的模式来启动的

    那么问题来了,http协议我们知道,ajp协议是什么??
    看过tomcat的server.xml配置文件的,会了解到里面有这两个连接器

    1)HTTP Connector

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

    拥有这个连接器,Tomcat才能成为一个web服务器,还可以处理Servlet和jsp。

    2)AJP Connector

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    AJP连接器可以通过AJP协议和另一个web容器进行交互。
    到这里我们就知道,AJP 他的作用就是负责和其他的HTTP服务器建立连接
    例如和apche服务器连接,有了这个协议,才可以把apche服务器和tomcat服务器给连接起来

    那么 【http-nio-8091】 中的 http 和ajp 我们都了解了, 那么第二个参数nio是什么???
    第二个参数代表的是tomcat的请求连接方式是什么样的。
    在tomcat中连接方式一共有3种,往下看详解

    tomcat有3种方式启动,分别是bio,nio,apr

    什么是BIO NIO APR ?

    BIO
    bio是阻塞式IO操作,使用java io技术,即每一个请求都要创建一个线程来进行处理。缺点:并发量高时,线程数较多,占资源

    NIO
    使用java nio技术,能够通过少量的线程处理大量的请求
    nio是基于java中非阻塞IO操作的API实现,比传统的i/o处理方式有更高的并发运行性能

    APR
    (Apache Portable Runtime/Apache可移植运行时库)
    apr是从操作系统级别解决异步IO问题,大幅度提高服务器的并发处理性能,也是Tomcat生产环境运行的首选方式

    如图
    1)bio的启动信息

    在这里插入图片描述

    2)nio模式的启动信息

    在这里插入图片描述

    3)apr模式的启动信息

    在这里插入图片描述

    我们需要做的是把 http 和 ajp 都改成 用apr 的方式启动

    tomcat8以及之后的版本默认都是以NIO的模式启动,如果要启动apr,需要自己设置

    1)windows下设置用apr启动:
    windows下已经安装有apr的支持,所以直接在service.xml文件中修改配置即可
    找到以下这行

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

    修改成

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

    这样之后,http就是以apr的模式启动了,
    效果如下

    在这里插入图片描述

    但是 ajp 没有启动apr,所以我们还需要再进行下一步操作

    找到以下这行

    <Connector port="8092" protocol="AJP/1.3" redirectPort="8443" />

    修改成

    <Connector port="8092" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />

    这样之后,ajp 就是以apr的模式启动了,
    效果如下

    在这里插入图片描述

    HTTP和AJP 对应的协议,可以直接用前缀+协议名字填入到server.xml
    例如 org.apache.coyote.http11.Http11NioProtocol

    HTTPAJP
    前缀 org.apache.coyote.http11 前缀 org.apache.coyote.ajp
        
    HTTP Http11Protocol Http11NioProtocol Http11AprProtocol
    AJP AjpProtocol AjpNioProtocol AjpAprProtocol

    以上说的是在windows下开启apr,那么linux也是可以开启的,但是,linux默认没有安装apr的依赖
    所以需要我们自己安装,具体的安装内容会在我的下一篇博客,敬请期待~

    最后来自网络的总结:

    Apr处理请求最快,Nio次之,Bio最慢;

    Apr宽带占用最高,Bio最低;但Apr的内存占用最高,而Nio的内存占用最低

    所以综合来看,Nio适用于一般需求;Apr适用于高并发需求

  • 相关阅读:
    百度音乐搜索API
    浅谈对设计模式的理解
    AS3 Embed
    AS3.0中遍历删除容器内子对象的误区。
    如何获取GridView的总记录数?
    分享几个国外的Ajax&Jquery网站
    SQL2000: MMC 不能打开文件
    结合.net开发 谈谈 access 中 模糊查询语句 like的用法
    [转]C#里巧用DateTime预设一些可选的日期范围(如本年度、本季度、本月等)
    根据条件动态改变GridView某行或某个单元格的背景色
  • 原文地址:https://www.cnblogs.com/leeego-123/p/11362259.html
Copyright © 2011-2022 走看看