您现在的位置:首页行业资讯

java开发Tomcat优化之io优化--中享思途

前言:
前面我们介绍了tomcat的内存和线程池优化,今天来介绍一下io优化
简介
Tomcat支持三种接收请求的处理方式:BIO、NIO、APR
BIO模式:
阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即java.io包及其子包)。启动tomcat看到如下日志,表示使用的是BIO模式:

青岛Java培训--中享思途

Tomcat7以下版本默认情况下是以bio模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低
NIO模式:
Nio是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行比较简单,只需要在Tomcat安装目录下的/conf/server.xml文件中更改如下配置:

青岛Java培训--中享思途

需要注意的是,tomcat8以上默认为nio模式,无需修改,直接启动tomcat看到如下日志,表示使用的是BIO模式:

青岛Java培训--中享思途

APR模式
多线程条件下IO流最好的优化是APR。APR性能相比NIO还要高一级,是tomcat运行高并发应用时的首选模式,而我们要优化也指的是切换使用APR模式
Apr全称:Apache Portable Runtime  是Apache的可移植库。
它基于操作系统,通过Java虚拟机调用操作系统自带的IO处理方式来晚上Java的io流操作。(利用操作系统的代码处理Java的io流)这也是它高效率的原因之一
Windows10是支持APR的。  所以满足条件windows10+tomcat8才能使用apr技术。
apr模式本质是使用JNI技术调用操作系统IO接口
JNI:Java代码调用C代码的一个技术。
所以要使用apr需要安装依赖库
下面以win10情况下做演示:
1、修改配置Tomcat安装目录下的/conf/server.xml文件中
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443"  executor="qianfeng"/>
2.导入动态库tcnative-1.dll到tomcat安装目录下。3.重启tomcat,启动日志上就会有

青岛Java培训--中享思途

启动时显示如下表示更改成功
但如果我们是springboot项目呢?我们都知道springboot项目内置tomcat肯定不能像这样去修改配置文件,接下来我们看一下springboot项目的配置
springboot项目启动apr模式
可以参考以下配置

青岛Java培训--中享思途

需要注意的是
开启apr之后,jvm用到的native内存会变大,所以要提前适当调大Metaspace空间,
JVM选项:-XX:MetaspaceSize=128m
更加具体的可以参考往期文章,jvm内存优化那篇
Linux上更改apr模式则需要手动安装apr的依赖库
具体的命令可以参考如下:
Apr依赖库安装
tar zxvf apr-1.4.5.tar  cd apr-1.4.5  ./configure --prefix=/usr/local/apr  make  make install  
安装apr-iconv tar -zxvf apr-iconv-1.2.1.tar.gz  cd apr-iconv-1.2.1  ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr  make  make install
安装apr-util tar zxvf apr-util-1.3.12.tar.gz  cd apr-util-1.3.12  ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr  --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv  make  make install
安装tomcat-native
tar -zxvf tomcat-native.tar.gzcd tomcat-native-1.2.12-srccd native./configure --with-apr=/usr/local/apr --with-ssl=/usr/local/openssl makemake install
添加环境变量
vi /etc/profile #在他文件末尾处添加下面的变量
# apr
export LD_LIBRARY_PATH=/usr/local/apr/lib
执行
source /etc/profile
最后修改server.xml
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443"  executor="qianfeng"/>
重启Tomcat看到以下信息即可
对于这几种模式,我用ab命令模拟1000并发测试10000次,测试结果比较意外,为了确认结果,我每种方式反复测试了10多次,并且在两个服务器上都测试了一遍。结果发现Bio和Nio性能差别不大。但是采用apr,连接建立的速度会有50%~100%的提升。
业务上的话,tomcat的数量减少了40%
如果使用linux服务器,还需要优化内核,修改/etc/sysctl.cnf文件
可以在文件最后加上如下内容
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 65536
结语
篇幅限制,先简单介绍这些,我们下期再细说,小编会定期分享自己学过的知识,各位看官可以点关注,一起分享学习的经验和方法,各位大佬对小编的看法有哪些补充或者不同的观点,欢迎在评论区留言斧正。

【关键词:青岛Java培训,正规Java开发培训,学Java开发多少钱,Java培训哪家好,中享思途】
 st_bottom
青岛Java培训,青岛HTML5培训,青岛UI培训,青岛web开发培训,青岛IT培训,java培训,ui培训,HTML5培训,java就业培训,专业ui设计,web开发培训,IT培训,思途教育,青岛思途,中享思途
Copyright © 青岛思途共享科技信息服务有限公司 鲁ICP备14027489号-2

鲁公网安备 37021402000988号

青岛Java培训,青岛HTML5培训,青岛UI培训,青岛web开发培训,青岛IT培训,java培训,ui培训,HTML5培训,java就业培训,专业ui设计,web开发培训,IT培训,思途教育,青岛思途,中享思途