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

HTTP AJP
前缀 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适用于高并发需求

tomcat启动nio,apr详解以及配置的更多相关文章

  1. Tomcat启动过程原理详解 -- 非常的报错:涉及了2个web.xml等文件的加载流程

    Tomcat启动过程原理详解 发表于: Tomcat, Web Server, 旧文存档 | 作者: 谋万世全局者 标签: Tomcat,原理,启动过程,详解 基于Java的Web 应用程序是 ser ...

  2. Tomcat负载均衡原理详解及配置(Apache2.2.19+Tomcat7.0.12)

    结构图 JAVA项目一般直接用Tomcat作为Web服务器.为了增加tomcat的性能和稳定性,我们一般采用balance和session同步机制. 下图列出了我们常用也是最简单的解决方案. 说明 1 ...

  3. Tomcat启动过程原理详解

    基于Java的Web 应用程序是 servlet.JSP 页面.静态页面.类和其他资源的集合,它们可以用标准方式打包,并运行在来自多个供应商的多个容器.Web 应用程序存在于结构化层次结构的目录中,该 ...

  4. Tomcat配置(二):tomcat配置文件server.xml详解和部署简介

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  5. Tomcat(二):tomcat配置文件server.xml详解和部署简介

    Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务 ...

  6. log4j.properties 详解与配置步骤(转)

    找的文章,供参考使用 转自 log4j.properties 详解与配置步骤 一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR ...

  7. tomcat bio nio apr 模式性能测试

    转自:tomcat bio nio apr 模式性能测试与个人看法 11.11活动当天,服务器负载过大,导致部分页面出现了不可访问的状态.那后来主管就要求调优了,下面是tomcat bio.nio.a ...

  8. 【转】联想笔记本进入u盘启动项操作方法详解

    win7之家小编最近可是对联想笔记本进入u盘启动项的方法很有兴趣啊,那么联想进入u盘启动到底要怎么操作呢?其实方法是有的,因为小编就是研究联想进入u盘启动出身的,下面小编就给大家带来史上最详细的联想笔 ...

  9. Java NIO 的前生今世 之四 NIO Selector 详解

    Selector Selector 允许一个单一的线程来操作多个 Channel. 如果我们的应用程序中使用了多个 Channel, 那么使用 Selector 很方便的实现这样的目的, 但是因为在一 ...

随机推荐

  1. C#3.0新增功能10 表达式树 03 支持表达式树的框架类型

    连载目录    [已更新最新开发文章,点击查看详细] 存在可与表达式树配合使用的 .NET Core framework 中的类的大型列表. 可以在 System.Linq.Expressions 查 ...

  2. C# MATLAB混编(一)

    参照这篇博客进行的C# MATLAB混编学习,学习过程中文章中的一些问题我并没有遇到,但是我遇到了一些新问题,这些问题的解决办法将在下一篇博客给出. 配置环境:vs2010(64位)+Matlab20 ...

  3. 盘一盘 synchronized (二)—— 偏向锁批量重偏向与批量撤销

    在本文讲解之前,先来简单了解一下为什么会有批量重偏向和批量撤销.   批量重偏向:当一个线程创建了大量对象并执行了初始的同步操作,后来另一个线程也来将这些对象作为锁对象进行操作,会导偏向锁重偏向的操作 ...

  4. ssm下的CURD

    https://github.com/MenghuiLiu/ssm-curd 以后有更新.... 照着前辈的足迹向前撸

  5. mysql 不同版本下 group by 组内排序的差异

    最近发现网上找的 group by 组内排序语句在不同的mysql版本中结果不一样.   建表语句:   SET FOREIGN_KEY_CHECKS=0;   -- ---------------- ...

  6. Linux常用命令3

    useradd 添加用户账号 -n 制定uid标记号 -d 指定宿主目录,缺省默认为/home/用户名 -e 制定账号失效时间 -M 不为用户建立初始化宿主目录(通常作为不登陆账号) -s 指定用户的 ...

  7. TypeError: unbound method

    调用类报错,具体如下 TypeError: unbound method submit() must be called with jinjin instance as first argument ...

  8. springBoot的过滤器,监听器,拦截器

    概述 在开发中,我们经常要考虑一些问题,对敏感词进行过滤,用户是否已经登录,是否需要对他的请求进行拦截,或者领导问现在在线人数有多少人?我们如何实现这些功能哪 @WebFilter package c ...

  9. Codeforces Round #192 (Div. 2) (329A)C.Purification

    题意: 在一个正常的点可以净化该行该列的所有细胞,判断是否可以净化所有的细胞,并且输出所选的点. 思路: 如果可以的话,一定会选n个点. 先判断每一行是否有正常细胞,然后判断每一列是否有,如果都没有肯 ...

  10. 续集:白菜的内涵,更新nand分区为ubifs,替换overlay

    在上一篇真千兆路由的极限之OPENWRT MAKE, 某品牌白菜价QCA9558/QCA9880/QCA8337N纯种组合OS搭建时记中附带了128M nand的空间图示,在ar71xx profil ...