Tomcat在Linux服务器上的BIO、NIO、APR模式设置方法

一、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在Linux服务器上的BIO、NIO、APR模式设置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Linux下Tomcat8.0.44配置使用Apr的方法
  • Tomcat安装与配置Native APR模式的教程
(0)

相关推荐

  • Linux下Tomcat8.0.44配置使用Apr的方法

    听说Apr可以提高tomcat很多的性能,配置具体如下 1.安装apr 1.5.2 [root@ecs-3c46 ]# cd /usr/local/src [root@ecs-3c46 src]# wget http://apache.fayea.com//apr/apr-1.5.2.tar.gz [root@ecs-3c46 src]# tar -xzvf apr-1.5.2.tar.gz [root@ecs-3c46 src]# cd apr-1.5.2 [root@ecs-3c46 apr

  • Tomcat安装与配置Native APR模式的教程

    前言 众所周知APR 能大幅提高 tomcat 的性能,但我并没有做过性能比较测试.下面这篇文中主要介绍了在 CentOS 6.5 下为 tomcat 7 安装和配置 APR 模式的步骤和过程.在安装之前,先进行简单的介绍一下相关的内容,下面来一起学习学习吧. 技术准备 什么是APR?(以下是来自维基百科的内容) Apache可移植运行时( Apache Portable Runtime,简称APR)是Apache HTTP服务器的支持库,提供了一组映射到下层操作系统的API.如果操作系统不支持

  • Tomcat在Linux服务器上的BIO、NIO、APR模式设置方法

    一.BIO.NIO.AIO 先了解四个概念: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写). 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API). 阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回). 非阻塞 : 柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到

  • 在linux服务器上安装Jenkins

    Jenkins是用java编写的开源持续集成工具,目前被国内外各公司广泛使用.本章教大家如何在linux服务器上安装Jenkins. 一.获得一台linux服务器 要在linux下安装git,首先你得先有一台linux服务器,作为小白,手头的机器肯定都是windows的,搞个虚拟机安装对我这种小白简直是折磨人:这里使用最简单的方式获得一台linux服务器,就是从阿里云上租一台.镜像选择CentOS7.3 64位. 二.安装jdk Jenkins的运行需要依赖jdk,所以在安装Jenkins之前我

  • 在Linux服务器上部署vue项目

    案例一 vue-cli构建vue3项目,将项目上传到Linux服务器,服务器安装node,并启动vue项目 首先本地有一个vue项目,启动后可正常访问 本地打包后,也可直接访问 若打包后的index.html页面显示空白,需在项目的根路径下新建vue.config.js,再重新打包,参考 Linux服务器安装nodejs,参考 # 下载node压缩包,在哪条路径下执行该命令,就会下载到哪条路径下 wget https://npm.taobao.org/mirrors/node/v12.16.1/

  • Windwos下使用winscp和批处理实现通过SSH端口上传文件到Linux服务器上

    Windwos下使用winscp和批处理实现通过SSH端口上传文件到Linux服务器上 今天同事想在windows上使用winscp上传文件到linux服务器上,又想偷懒想使用批处理来进行上传,还好只固定上传一个php文件,多了还真不好搞. 1.下载winscp 大家可以去网上自己找,我把winscp安装在c:下的 2.把要执行的命令保存到文件winscp.bat里,这个winscp.bat可以自己创建,我是放在d:下的. winscp.bat脚本内容: 复制代码 代码如下: option co

  • 查看linux服务器上mysql配置文件路径的方法

    在类NUIX的系统中,配置文件的位置一般在/etc/my.cnf 或者 /etc/MySQL/my.cnf 我们见过有些人尝试修改配置文件但是不生效,因为他们修改的并不是服务器读取的文件.例如Debian下,/etc/mysql/my.cnf才是MySQL读取的配置文件,而不是/etc/my.cnf. 如果不知道当前使用的配置文件路径,可以尝试下面的操作: 对于服务器上只有一个MySQL实例的典型安装,这个命令很有用 以上就是小编为大家带来的查看linux服务器上mysql配置文件路径的方法全部

  • 在Linux服务器上安装 memcached的基本操作

    一.memcached的安装 1.下载 memcached-1.4.33.tar.gz.libevent-2.0.22-stable.tar.gz 安装 memcached 依赖 libevent 2.安装 libevent a.解压 [root@iZ28b4kreuaZ webserver]# tar zxvf libevent-2.0.22-stable.tar.gz b.安装在 /usr/local/下 进入解压目录下:[root@iZ28b4kreuaZ libevent-2.0.22-

  • python 读取Linux服务器上的文件方法

    使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hostname = "" port = 22 username = "" password = "" client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.Au

  • 如何使用Shell脚本掩盖Linux服务器上的操作痕迹(推荐)

    使用Shell脚本在Linux服务器上能够控制.毁坏或者获取任何东西,通过一些巧妙的攻击方法黑客可能会获取巨大的价值,但大多数攻击也留下踪迹.当然,这些踪迹也可通过Shell脚本等方法来隐藏. 寻找攻击证据就从攻击者留下的这些痕迹开始,如文件的修改日期.每一个 Linux 文件系统中的每个文件都保存着修改日期.系统管理员发现文件的最近修改时间,便提示他们系统受到攻击,采取行动锁定系统.然而幸运的是,修改时间不是绝对可靠的记录,修改时间本身可以被欺骗或修改,通过编写 Shell 脚本,攻击者可将备

  • Python通过paramiko远程下载Linux服务器上的文件实例

    如下所示: #!/usr/local/bin/python # encoding:utf-8 import paramiko import os HOST_IP='59.110.12.72' REMOTE_PATH='/proc' REMOTE_FILENAME='meminfo' LOCAL_PATH='./proc' USERNAME='niu' PASSWORD='123456' def remote_scp(host_ip,remote_path,local_path,file_name

  • 解决navicat连接不上linux服务器上的mysql问题

    一开始,心情是沉痛的,截图如下: 折腾一番后,解决方案如下: 首先确保 linux服务上mysql 的3306端口是对外开放的 切换到目录:/etc/sysconfig下,编辑iptables,把这个拷贝进去"-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT",效果如图: 然后重启防火墙 service iptables restart mysql开启root权限(mysql命令下执行) 赋予权限: grant all privileges o

随机推荐