共计 3978 个字符,预计需要花费 10 分钟才能阅读完成。
一、BIO、NIO、AIO
先了解四个概念:
同步:自己亲自出马持银行卡到银行取钱(使用同步 IO 时,Java 自己处理 IO 读写)。
异步:委托一小弟拿银行卡到银行取钱,然后给你(使用异步 IO 时,Java 将 IO 读写委托给 OS 处理,需要将数据缓冲区地址和大小传给 OS(银行卡和密码),OS 需要支持异步 IO 操作 API)。
阻塞:ATM 排队取款,你只能等待(使用阻塞 IO 时,Java 调用会一直阻塞到读写完成才返回)。
非阻塞:柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了没有,大堂经理如果说还没到你就不能去(使用非阻塞 IO 时,如果不能读写 Java 调用会马上返回,当 IO 事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成)。
Java 对 BIO、NIO、AIO 的支持:
Java BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
Java NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I / O 请求时才启动一个线程进行处理。
Java AIO(NIO.2):异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的 I / O 请求都是由 OS 先完成了再通知服务器应用去启动线程进行处理
BIO、NIO、AIO 适用场景分析:
BIO 方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4 以前的唯一选择,但程序直观简单易理解。
NIO 方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4 开始支持。
AIO 方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用 OS 参与并发操作,编程比较复杂,JDK7 开始支持。
二、tomcat 三种模式简介
BIO
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
(Apache Portable Runtime/Apache 可移植运行库),是 Apache HTTP 服务器的支持库。你可以简单地理解为,Tomcat 将以 JNI 的形式调用 Apache HTTP 服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高 Tomcat 对静态文件的处理性能。Tomcat apr 也是在 Tomcat 上运行高并发应用的首选模式。
三、tomcat 三种模式性能比较
这里我引用了网友给出的测试结果
四、tomcat 模式设置
我这里演示的是 tomcat7,默认是 BIO 模式的。而 tomcat8 是默认 NIO 模式的。
在这之前,我们先把 tomcat 管理界面配置起来,以便等下能更方便的观察我们的 bio、nio、apr 模式(如果不想设置这个,也可以一会查看 tomcat 的日志文件)
拉到最下面,复制红色框里的内容,在注释外粘贴,添加 manager/status 用户(这里的用户名请不要改,改了好像就不行了)
配置完重启 tomcat,通过 ip:port/manager/status 就可以看 tomcat 状态了,里面有服务器的信息及 tomcat 信息。
下来就是三种模式的配置步骤:
BIO 模式
tomcat7 默认就是。如果你是 tomcat8 或 9 想设置成 BIO 模式的,那么在这里修改
找到 port=8080 端口设置那项,只要红框内是这样的,重启 tomcat 就会使用 BIO 模式。tomcat7 默认就是这个样子
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
NIO 模式
在和设置 BIO 模式同样的位置上,将红框的内容变成这样,重启 tomcat 就会使用 NIO 模式。tomcat8 默认就是这个样子
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
APR 模式
启用这种模式稍微麻烦一些,需要安装一些依赖库,以下就是安装所需的条件:
1,最新的 apr
2,最新的 apr-util
3,tomcat-native.tar.gz(在 tomcat/bin/ 下有相应的安装 tar 包)
不过也需要改配置文件,先来改配置文件吧,还是在同样的位置,将红框的内容变成这样(注意和 NIO 模式很像),保存退出,然后去安装依赖库
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
安装那三个依赖前,先看下服务器中有没有装 apr
我这里是装过了(好像是 tomcat 自己装的,不记得了),所以要先卸载,忽略依赖的卸载,重新装最新的
1.apr(http://apr.apache.org/download.cgi),上传解压
安装到 /usr/local/apr
./configure --prefix=/usr/local/apr && make && make install
2.apr-util(http://apr.apache.org/download.cgi),上传解压
安装到 /usr/local/apr-util,指定 apr 的目录
./configure --with-apr=/usr/local/apr/ --prefix=/usr/local/apr-util && make && make install
3.tomcat-native(在 tomcat/bin/ 下有相应的安装 tar 包),解压
安装,指定 apr 的目录和 JAVA_HOME 的目录
./tomcat-native-1.2.14-src/native/configure --with-apr=/usr/local/apr --with-java-home=/usr/share/jdk1.8 && make && make install
安装完后记得在 /etc/profile 文件中的 JAVA_HOME 环境变量后面多加一条 APR 的环境变量(注意你自己安装的 apr 目录)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
用 source /etc/profile 命令让环境变量配置立即生效
启动 tomcat,访问(你 tomcat 所在服务器的 ip)192.168.25.128:8080/manager/status,这样就 ok 了
如果上面你不想设置 tomcat 管理界面,也可以通过日志查看
更多 Tomcat 相关教程见以下内容:
CentOS 6.6 下安装配置 Tomcat 环境 http://www.linuxidc.com/Linux/2015-08/122234.htm
RedHat Linux 5.5 安装 JDK+Tomcat 并部署 Java 项目 http://www.linuxidc.com/Linux/2015-02/113528.htm
Tomcat 权威指南(第二版)(中英高清 PDF 版 + 带书签) http://www.linuxidc.com/Linux/2015-02/113062.htm
Tomcat 安全配置与性能优化 http://www.linuxidc.com/Linux/2015-02/113060.htm
Linux 下使用 Xshell 查看 Tomcat 实时日志中文乱码解决方案 http://www.linuxidc.com/Linux/2015-01/112395.htm
CentOS 64-bit 下安装 JDK 和 Tomcat 并设置 Tomcat 开机启动操作步骤 http://www.linuxidc.com/Linux/2015-01/111485.htm
Ubuntu 16.04 下安装 Tomcat 8.5.9 http://www.linuxidc.com/Linux/2017-06/144809.htm
Ubuntu 16.04 安装 Tomcat 8 图解 http://www.linuxidc.com/Linux/2017-10/147773.htm
Tomcat 配置文件 server.xml 详解 http://www.linuxidc.com/Linux/2017-10/148003.htm
Tomcat 单机多实例部署 - 多项目部署 http://www.linuxidc.com/Linux/2017-10/147259.htm
Tomcat 的详细介绍:请点这里
Tomcat 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149874.htm