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

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

同步:自己亲自出马持银行卡到银行取钱(使用同步IO时,Jave 自己处理IO读写)。
异步:委托一小弟拿银行卡到银行取钱, 然后给你(使用异步IO时,Java将IO读写委托给os处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),os需要支持异步IO操作API)。
阻塞: ATM排队取款,你只能等待(使用阻塞10时, Java调用会一直阻塞到读写完成才返回)。
非阻塞:柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了没有,大堂经理如果说还没到你就不能去(使用非阻塞10时,如果不能读写Java调用会马上返回,当10事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成)。
Java对BI0、 NIO、 AIO的支持:
JavaBIO:同步并阻塞,服务器实现模式为一个连接一 个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。。
同步非阻塞,服务器实现模式为一个请求一个线程, 即客户端发送的连接
➢Java NIO :请求都会注册到多路复用器上,多路复用器轮询到连接有1/0请求时才启动  个线程进行处理。
异步非阻塞,服务器实现模式为一个有效请求一个线程, 客户端
➢ Java AIO (NIO.2) :的v0O请求都是由os先完成了再通知服务器应用去启动线程进行处理
=============================================
面试:(tomcat运行在异步非阻塞才能发挥更高的性能)
tomcat三种模式:BIO、 NIO、 AIO(APR)
面试:什么是BIO、NIO、 AIO(APR)
小技巧:
vim/etc/fstab    //实现自动挂载
/dev/sr0        /media  iso9660 defaults        0 0   //0是程序备份 0是磁盘开机自检
=============================================
1.同步,异步,阻塞,非阻塞场景举例
同步:使用同步IO时,JAVA自己处理IO读写(效率不是特别高)
异步:使用异步IO时,JAVA将IO读写委托给OS(系统)处理,需要将数据缓冲区地址和大小传给OS,OS需要支持异步IO和操作API,(可靠,能够处理更高的并发)
阻塞:使用阻塞IO时,JAVA调用会一直阻塞到读写完成才返回(排队)
非阻塞:使用非阻塞IO的时候,如果不能读写JAVA调用会马上返回,当IO事件分发器会通知可读写时再进行读写,不断循环直到读写完成
2.JAVA对BIO,NIO和AIO的支持
JAVA BIO: 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
 (稳定性好,并发不高)
JAVA NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
 tomcat8默认是NIO模式 可以在日志中查看[root@localhost ~]# tail /usr/local/tomcat8/logs/catalina.out
  24-Nov-2019 09:12:41.791 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
JAVA AIO(NIO的2版本):异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理
3.BIO,NIO,AIO适用场景分析
BIO:适用连接数较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。jdk1.4以前的唯一选择,但程序直观简单易理解,性能非常低,没有经过任何优化处理和支持。
NIO:适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂。
AIO:适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂。
4.Tomcat中BIO,NIO,APR模式介绍
BIO(blocking I/O):阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。Tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。
NIO:是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能,适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中。
APR(NIO的第2版):(Apache Portable Runtime/Apache可移植运行库),是Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。
默认模式NIO:
[root@localhost ~]# tail /usr/local/tomcat8/logs/catalina.out
24-Nov-2019 09:12:41.791 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
[root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
 69     <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"  //改不改都行
保存退出
[root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat8/bin/startup.sh
[root@localhost ~]# tail -f /usr/local/tomcat8/logs/catalina.out
24-Nov-2019 10:28:12.075 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
[root@localhost ~]# rpm -e apr --nodeps   //卸掉之前的版本
[root@localhost ~]# yum -y install apr apr-devel
[root@localhost ~]# ls /usr/local/tomcat8/bin
 。。。。tomcat-native.tar.gz。。。。。
[root@localhost ~]# cp /usr/local/tomcat8/bin/tomcat-native.tar.gz ./
[root@localhost ~]# tar xf tomcat-native.tar.gz
[root@localhost ~]# cd tomcat-native-1.2.21-src/native/
[root@localhost native]# ls
build             include            os
buildconf         libtcnative.dsp    src
build.conf        libtcnative.dsw    srclib
BUILDING          LICENSE.bin.win    tcnative.dsp
build-outputs.mk  Makefile.in        tcnative.pc.in
config.layout     NMAKEmakefile      tcnative.spec
configure         NMAKEmakefile.inc
configure.in      NOTICE.bin.win
[root@localhost native]# ./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/local/java && make && make install
[root@localhost native]# vim /usr/local/tomcat8/bin/catalina.sh
 2 CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
保存退出
[root@localhost native]# vim /etc/profile
 79 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local    /apr/lib
保存退出
[root@localhost native]# source /etc/profile
[root@localhost native]# vim /usr/local/tomcat8/conf/server.xml
 69     <Connector port="8080" protocol="org.apache.co    yote.http11.Http11AprProtocol"
保存退出
[root@localhost native]# /usr/local/tomcat8/bin/shutdown.sh
[root@localhost native]# /usr/local/tomcat8/bin/startup.sh
[root@localhost native]# tail -f /usr/local/tomcat8/logs/catalina.out
24-Nov-2019 11:15:08.093 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
在浏览器中进行查看:192.168.200.67:8080

----------------------------------------------------------------
解决重启tomcat服务后,8005端口延迟启动的问题
[root@localhost ~]# vim /usr/local/java/jre/lib/security/java.security
 117 securerandom.source=file:/dev/urandom   //把random 改为urandom
保存退出
----------------------------------------------------------------

猜你喜欢

转载自www.cnblogs.com/elin989898/p/11921702.html