2019.9.22 Tomcat的三种运行模式 (BIO,NIO,AIO也叫apr)

1、同步概念:

  • 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。
  • 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API)。
  • 阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回)。
  • 非阻塞 : 柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了没有,大堂经理如果说还没到你就不能去(使用非阻塞IO时,如果不能读写Java调用会马上返回,当IO事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成)。

2Java对BIO、NIO、AIO的支持:

  • Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
  • Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
  • Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理

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

  • BIO

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解,性能非常低下,没有经过任何优化处理和支持。

  • NIO

Nio(new I/O),是java SE1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio 是一个基于缓冲区,并能提供非阻塞I/O操作的java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中。

  • APR

安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高了性能

Tomcat8默认运行模式为NIO

[[email protected] ~]# tail -1 /usr/local/tomcat8/logs/catalina.out

08-Apr-2019 11:45:01.589 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]

[[email protected] ~]# vim /usr/local/tomcat8/conf/server.xml

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"

               connectionTimeout="20000"

               redirectPort="8443"

               compression="on"

               compressionMinSize="50"

               noCompressionUserAgents="gozilla, traviata"

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />

[[email protected] ~]# /usr/local/tomcat8/bin/shutdown.sh

[[email protected] ~]# /usr/local/tomcat8/bin/startup.sh

[[email protected] ~]# tail -f /usr/local/tomcat8/logs/catalina.out

08-Apr-2019 11:56:02.441 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]

 

模式三Apr 

[[email protected] ~]# rpm -e apr --nodeps

[[email protected] ~]# yum -y install apr  apr-devel

[[email protected] ~]# cp /usr/local/tomcat8/bin/tomcat-native.tar.gz /root/

[[email protected] ~]# tar xf tomcat-native.tar.gz

[[email protected] ~]# cd tomcat-native-1.2.12-src/native/

[[email protected] native]# ./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/local/java && make && make install

----------------------------------------------------------------------

Libraries have been installed in:

   /usr/local/apr/lib

 

If you ever happen to want to link against installed libraries

in a given directory, LIBDIR, you must either use libtool, and

specify the full pathname of the library, or use the `-LLIBDIR‘

flag during linking and do at least one of the following:

   - add LIBDIR to the `LD_LIBRARY_PATH‘ environment variable

     during execution

   - add LIBDIR to the `LD_RUN_PATH‘ environment variable

     during linking

   - use the `-Wl,-rpath -Wl,LIBDIR‘ linker flag

   - have your system administrator add LIBDIR to `/etc/ld.so.conf‘

 

See any operating system documentation about shared libraries for

more information, such as the ld(1) and ld.so(8) manual pages.

----------------------------------------------------------------------

 

[[email protected] tomcat-native-1.2.17-src]# cd

[[email protected] native]# vim /usr/local/tomcat8/bin/catalina.sh##末尾添加,设置环境变量

CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"

[[email protected] native]# vim /usr/local/tomcat8/conf/server.xml     

69     <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" [[email protected] ~]# vim /etc/profile##在最后一行添加

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

[[email protected] native]# source /etc/profile     //加载进程文件profile

[[email protected] native]# /usr/local/tomcat8/bin/shutdown.sh

[[email protected] native]# /usr/local/tomcat8/bin/startup.sh

[[email protected] ~]# netstat -utpln |grep java

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2748/java           

tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      2748/java

[[email protected] native]# tail -3 /usr/local/tomcat8/logs/catalina.out

08-Apr-2019 12:20:20.455 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]

解决重启tomcat服务后,8005端口延迟启动的问题;

[[email protected] ~]# vi /usr/local/java/jre/lib/security/java.security       

117 securerandom.source=file:/dev/urandom                 //修改tomcat随机数,方便加载8005端口延迟

原文地址:https://www.cnblogs.com/otherwise/p/11569170.html

时间: 2024-10-09 00:47:14

2019.9.22 Tomcat的三种运行模式 (BIO,NIO,AIO也叫apr)的相关文章

Tomcat Connector三种运行模式(BIO, NIO, APR)的比较和优化

Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如下: BIO: 一个线程处理一个请求.缺点:并发量高时,线程数较多,浪费资源. Tomcat7或以下,在Linux系统中默认使用这种方式. NIO: 利用Java的异步IO处理,可以通过少量的线程处理大量的请求. Tomcat8在Linux系统中默认使用这种方式. Tomcat7必须修改Connector配置来启动: <Connector port="8080" pro

Tomcat Connector的三种运行模式

详情参考: http://tomcat.apache.org/tomcat-7.0-doc/apr.html http://www.365mini.com/page/tomcat-connector-mode.htm 操作环境:rhel6.3 x86_x64. tomcat7.0.42 tomcat connector三种运行模式分别为:bio.nio和apr.你可以简单地理解成,性能上:bio<nio<=apr 其中bio为默认运行方式,即(server.xml): <Connecto

Tomcat Connector(BIO, NIO, APR)三种运行模式(转)

Tomcat支持三种接收请求的处理方式:BIO.NIO.APR . BIO 阻塞式I/O操作即使用的是传统 I/O操作,Tomcat7以下版本默认情况下是以BIO模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低. 配置如下(tomcat安装目录下的/conf/server.xml): <Connector port="8080" protocol="HTTP/1.1" connectionTimeout

python编程(python开发的三种运行模式)【转】

转自:http://blog.csdn.net/feixiaoxing/article/details/53980886 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 单循环模式 多线程模式 reactor模式 [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] Python作为一门脚本语言,使用的范围很广.有的同学用来算法开发,有的用来验证逻辑,还有的作为胶水语言,用它来粘合整个系统的流程.不管怎么说,怎么使用pyt

Tomcat Connector三种执行模式(BIO, NIO, APR)的比較和优化

Tomcat Connector的三种不同的执行模式性能相差非常大,有人測试过的结果例如以下: 这三种模式的不同之处例如以下: BIO: 一个线程处理一个请求.缺点:并发量高时,线程数较多,浪费资源. Tomcat7或下面,在Linux系统中默认使用这样的方式. NIO: 利用Java的异步IO处理.能够通过少量的线程处理大量的请求. Tomcat8在Linux系统中默认使用这样的方式. Tomcat7必须改动Connector配置来启动: <Connector port="8080&qu

php-fpm 三种运行模式

php-fpm配置 配置文件:php-fpm.conf 开启慢日志功能的: slowlog = /usr/local/var/log/php-fpm.log.slowrequest_slowlog_timeout = 5s 当某个请求的时间超过了5秒,就会在慢日志中记录相应的记录,注意上面的时间5s,不能忽略了单位,相应的还有其他单位,m分,h时 php-fpm慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长: [21-Nov-2016 10:30:38] [pool

hadoop三种运行模式

1.单机模式:安装简单,几乎不用做任何配置,但仅限于调试用途 2.伪分布模式:在单节点上同时启动namenode.datanode.jobtracker.tasktracker.secondarynamenode等5个进程,模拟分布式运行的各个节点 3.完全分布式模式:正常的Hadoop集群,由多个各司其职的节点构成

将项目部署到tomcat的三种方法

2014年8月初8    星期五 又到星期五了,可以轻松的敲点东西,不担心睡太晚起不来,或者起来后上班打瞌睡. 由于近期学习了solr相关的知识,部署solr项目到tomcat上的方式很多,包括官方的等.我自己也找了中非官方的方法,感觉很好.而且以前用MyEclipse开发,出错很少,现在用Eclipse所以部署项目后在后台调用user.dir的时候出错,试了一下午也没事出来,而且越试越想试,但是带我的人不让我弄了,他帮我弄,让我干其他任务,我都怀疑是不是他也和我一样就喜欢干这种事情,所以自己去

Apache HTTP Server 与 Tomcat 的三种连接方式介绍

Apache HTTP Server 与 Tomcat 的三种连接方式介绍 整合 Apache Http Server 和 Tomcat 可以提升对静态文件的处理性能.利用 Web 服务器来做负载均衡以及容错.无缝的升级应用程序.本文介绍了三种整合 Apache 和 Tomcat 的方式. 3 评论: 刘 冬 ([email protected]), 开发工程师, 2007 年 1 月 15 日 内容 首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomca