精华内容
下载资源
问答
  • tomcat的三种运行模式

    2017-03-31 09:59:20
    tomcat的三种运行模式 [转]标签(空格分隔): tomcatTomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如下:●BIO: 一个线程处理一个请求。缺点:并发量高时,...

    tomcat的三种运行模式 [转]

    标签(空格分隔): tomcat

    Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下:
    image_1bccjbrr91o55a1d1jp31p441i129.png-23.2kB


    这三种模式的不同之处如下:

    ●BIO:
     一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。
    Tomcat7或以下,在Linux系统中默认使用这种方式。

    ●NIO:
     利用Java的异步IO处理,可以通过少量的线程处理大量的请求。
    Tomcat8在Linux系统中默认使用这种方式。
    Tomcat7必须修改Connector配置来启动:

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

    ●APR:
      即Apache Portable Runtime,从操作系统层面解决io阻塞问题。
    Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。
    Linux如果安装了apr和native,Tomcat直接启动就支持apr。(安装方法:http://www.cnblogs.com/nb-blog/p/5278502.html

    官方对这三种的区别的详细说明:

                      Java Blocking Connector   Java Nio Blocking Connector   APR/native Connector 
                                 BIO                         NIO                       APR 
    Classname                AjpProtocol               AjpNioProtocol           AjpAprProtocol 
    Tomcat Version           3.x onwards                 7.x onwards              5.5.x onwards 
    Support Polling              NO                          YES                       YES 
    Polling Size                 N/A                   maxConnections             maxConnections 
    Read Request Headers      Blocking                  Sim Blocking                   Blocking 
    Read Request Body         Blocking                  Sim Blocking                   Blocking 
    Write Response            Blocking                  Sim Blocking                   Blocking 
    Wait for next Request     Blocking                  Non Blocking               Non Blocking 
    Max Connections        maxConnections              maxConnections             maxConnections 

    Tomcat启动的时候,可以通过log看到Connector使用的是哪一种运行模式:

        Starting ProtocolHandler ["http-bio-8080"]
        Starting ProtocolHandler ["http-nio-8080"]
        Starting ProtocolHandler ["http-apr-8080"]

    例如:
    image_1bcckdtqdvab1fno881lfpjdkm.png-23.4kB

    展开全文
  • 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三种运行模式(BIO, NIO...Tomcat8.0起已经默认nio模式,不需要做修改,BIO模式也已经抛弃了,今天主要介绍下tomcat的三种运行模式:BIO、NIO、ARP。 TOMCAT BIO、NIO、AIO适用场景分析: BIO方式适用于连...

    转载自:https://www.iteye.com/blog/uule-2438763

    详解Tomcat三种运行模式(BIO, NIO, APR)的比较和场景分析

    在这里插入图片描述NIO 方式:
    在这里插入图片描述Tomcat8.0起已经默认nio模式,不需要做修改,BIO模式也已经抛弃了,今天主要介绍下tomcat的三种运行模式:BIO、NIO、ARP。

    TOMCAT BIO、NIO、AIO适用场景分析:

    BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

    NIO方式适用于【连接数目多且连接比较短】(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

    AIO方式使用于【连接数目多且连接比较长】(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

    这三种模式的不同之处如下:

    BIO:

    【一个线程处理一个请求】。

    缺点:【并发量高时,线程数较多,浪费资源】。

    Tomcat7或以下,在Linux系统中默认使用这种方式。

    NIO:

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

    Tomcat8在Linux系统中默认使用这种方式。

    APR:

    即Apache Portable Runtime,从操作系统层面解决io阻塞问题。

    Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。

    =============================================================

    NIO是什么?适用于何种场景?
    NIO模型,select/epoll的区别,多路复用的原理
    原生的 NIO 在 JDK 1.7 版本存在 epoll bug

    JAVA BIO:

    来一个新的连接,我们就新开一个线程来处理这个连接,之后的操作全部由那个线程来完成。

    那么,这个模式下的性能瓶颈在哪里呢?

    首先,每次来一个连接都开一个新的线程这肯定是不合适的。当活跃连接数在几十几百的时候当然是可以这样做的,但如果活跃连接数是几万几十万的时候,这么多线程明显就不行了。

    【每个线程都需要一部分内存,内存会被迅速消耗】,同时,【线程切换的开销也非常大】。

    其次,阻塞操作在这里也是一个问题。首先,【accept() 是一个阻塞操作,当 accept() 返回的时候,代表有一个连接可以使用了】,我们这里是马上就新建线程来处理这个 SocketChannel 了,

    但是,【但是这里不代表对方就将数据传输过来了】。所以,SocketChannel#read 方法将阻塞,等待数据,明显这个等待是不值得的。

    同理,write 方法也需要等待通道可写才能执行写入操作,这边的阻塞等待也是不值得的。

    JAVA NIO:

    非阻塞 IO 的核心在于【使用一个 Selector 来管理多个通道】,可以是 SocketChannel,也可以是 ServerSocketChannel,【将各个通道注册到 Selector上,指定监听的事件】。

    之后可以【只用一个线程来轮询这个 Selector,看看上面是否有通道是准备好的】,当通道准备好可读或可写,然后才去开始真正的读写,这样速度就很快了。我们就完全没有必要给每个通道都起一个线程。

    Channel

    所有的 NIO 操作始于通道,通道是数据来源或数据写入的目的地,主要地,我们将关心 java.nio 包中实现的以下几个 Channel:

    FileChannel:文件通道,用于文件的读和写,FileChannel 不支持非阻塞

    DatagramChannel:用于 UDP 连接的接收和发送

    SocketChannel:把它理解为 TCP 连接通道,简单理解就是 TCP 客户端

    ServerSocketChannel:TCP 对应的服务端,用于监听某个端口进来的请求

    Selector

    NIO 三大组件就剩 Selector 了,【Selector 建立在非阻塞的基础之上】,大家经常听到的 【多路复用】 在 Java 世界中指的就是它,【用于实现一个线程管理多个 Channel】。

    select:上世纪 80 年代就实现了,它支持注册 FD_SETSIZE(1024) 个 socket,在那个年代肯定是够用的,不过现在嘛,肯定是不行了。

    poll:1997 年,出现了 poll 作为 select 的替代者,最大的区别就是,【poll 不再限制 socket 数量】。

    【select 和 poll 都有一个共同的问题,那就是它们都只会告诉你有几个通道准备好了,但是不会告诉你具体是哪几个通道】。所以,【一旦知道有通道准备好以后,自己还是需要进行一次扫描】,显然这个不太好,通道少的时候还行,一旦通道的数量是几十万个以上的时候,扫描一次的时间都很可观了,时间复杂度 O(n)。所以,后来才催生了以下实现。

    epoll:2002 年随 Linux 内核 2.5.44 发布,【epoll 能直接返回具体的准备好的通道】,时间复杂度 O(1)。

    下面对 Java 异步 IO 进行实践性的介绍。

    总共有三个类需要我们关注,分别是 AsynchronousSocketChannel,AsynchronousServerSocketChannel 和 AsynchronousFileChannel,只不过是在之前介绍的 FileChannel、SocketChannel 和 ServerSocketChannel 的类名上加了个前缀 Asynchronous。

    Java 异步 IO 提供了两种使用方式,分别是返回 Future 实例和使用回调函数。

    展开全文
  • tomcat的运行模式有3: bio 默认的模式,性能非常低下,没有经过任何优化处理和支持 nio nio(new I/O),是Java SE 1.4及后续版本提供的一新的I/O操作方式(即java.nio包及其子包)。Java nio是 一个基于缓冲区、并...

    tomcat的运行模式有3种:

    1. bio 默认的模式,性能非常低下,没有经过任何优化处理和支持
    2. 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)更好的并发运行性能。
    3. apr 安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能
      在正常的使用中建议使用第二种模式,因为通过简单的配置就可以获得较高的性能;

    在tomcat8,还提供了nio2的模式,建议使用nio2模式,tomcat8以下版本可以使用nio1,在未改为nio的模式中默认是nio模式
    在这里插入图片描述
    修改以下配置,在server.xml文件中修改如下`在这里插入代码片

    <Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" />
    

    在这里插入图片描述
    可以看到已经修改为nio2了

    展开全文
  • Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如下: BIO:  一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux...
  • APR 安装起来最困难,但是从操作系统级别来解决异步IO问题,大幅度提高了性能 Tomcat8默认运行模式为NIO [root@localhost~]# tail -1 /usr/local/tomcat8/logs/catalina.out 08-Apr-2019 11:45:01.589 信息...
  • Tomcat Connector三种运行模式 BIO: 一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。 Tomcat7或以下,在Linux系统中默认使用这种方式。 NIO: 利用Java异步IO处理,可以通过少量...
  • tomcat三种运行模式

    千次阅读 2019-02-19 11:08:49
    Tomcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一。不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bio、nio...下面,我们先大致了解Tomcat Connector的三种运行模式。...
  • 主要介绍了浅谈Tomcat三种运行模式,小编冒昧将两篇文章略微整合了一下,有不足地方,欢迎指出。需要朋友可以参考。
  • Tomcat Connector三种运行模式(BIO, NIO, APR)的比较和优化 Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如下: BIO: 一个线程处理一个请求。缺点:...
  • Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式。 BIO bio(blocking I/O)是指阻塞式I/O操作,Tomcat在默认情况下就是以bio模式运行。这可以从守护线程信息看出来。 关于”阻塞式”理解,我们...
  • tomcat的运行模式有3种一、bio(blocking I/O)即阻塞式I/O操作,表示Tomcat使用的是传统的Java...一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。(Tomcat7 或...
  • tomcat的运行模式有3种一、bio(blocking i/o)即阻塞式i/o操作,表示tomcat使用的是传统的java...一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过tomcat manager来查看服务器的当前状态。(tomcat7 或...
  • Tomcat的运行模式有3.修改他们的运行模式.3模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。BIO默认的模式,性能非常低下,没有经过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 412
精华内容 164
关键字:

tomcat的三种运行模式