Springboot Tomcat APR模式详解和实践记录

 更新时间:2025年04月16日 09:03:36   作者:www.jianshu.com  
这篇文章主要介绍了Springboot Tomcat APR模式详解和实践记录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

前面的文章讲解了tomcat的nio线程模型,nio也是我们日常用的比较多的io模式,nio对比bio的优势这里就不多说了,网上有很多的文章说的很详细,今天在文中主要介绍下tomcat的apr模式,apr全称为apache portable runtime,这里套用下wiki对apr的解释:

很好理解就是为apache server准备的一套基于操作系统底层的类库。

这里先说下tomcat从nio切换到apr模式后的性能提升,使用的是公司的4c 8g的pc server,并发400的情况下的压测数据,我这里的性能提升没有很多网友说的那么大,有的网友甚至达到了80%的性能提升,我来回测了好几轮大约提升20%左右,压测的项目tps从原来的1500提升到了最高1800左右,对于这个结果还是比较满意的,在不改动业务逻辑代码的情况下能够达到这个指标。

APR的整体模式还是非阻塞IO,实现的线程模型也是按照NIO的标准模型实现的,从官方文档(http://apr.apache.org/docs/apr/1.6/modules.html)可以看到APR根据不同操作系统,分别用c重写了大部分IO和系统线程操作模块,这就是为什么APR在不改动代码的情况下能够提升,具体原理可以参考下我写的Tomcat NIO线程模式这篇文章。

下面这些就是APR重写的模块:

在Springboot中内嵌的Tomcat默认启动开启的是NIO模式,这里如果我们要在linux内核的系统上使用APR模式,那么需要安装一些lib库,可以通过rpm -q | grep apr来查看是否安装了apr,如果安装了则不再需要安装,如果未安装则需要安装下列库:

1)openssl,需要版本大于1.0.2,如果不使用https openssl也可以不安装,就是在启动的时候会报openssl的错误,直接忽视就可以了;

2)apr,可以去官网下载1.6.2最新版进行下载 http://apr.apache.org/download.cgi

apr-util,在同一个页面进行下载,最新版本为1.6.0版本

apr-iconv,在同一个页面进行下载,最新版本为1.2.1版本

tomcat-native,在tomcat中自带了安装包,可以在tomcat的bin目录下找到tomcat-native.tar;

安装apr

下载apr安装包apr-1.6.2.tar.gz

tar -xvf apr-1.6.2.tar.gz
cd apr-1.6.2

./configure 检查是否符合安装条件并配置安装参数,检查是否缺失类库,一般来说如果安装的不是精简版系统都是能顺利通过的

make & make install

如果不设置安装路径,那么系统默认的安装路径为/usr/local/apr/lib

安装apr-util

下载apr-util安装包apr-util-1.6.0.tar.gz

tar -xvf apr-util-1.6.0.tar.gz
cd apr-util-1.6.0
./configure --with-apr=/usr/local/apr/lib --with-java-home=/usr/lib/jvm/jdk-8u144-linux-x64/jdk1.8.0_144 安装apr-util需要配置apr路径和jvm路径,否则会报错找不到apr
make & make install

安装apr-iconv

下载apr-iconv.tar.gz

tar -xvf apr-iconv.tar.gz
cd apr-iconv
./configure --with-apr=/usr/local/apr/lib --with-java-home=/usr/lib/jvm/jdk-8u144-linux-x64/jdk1.8.0_144
make & make install

安装tomcat-native

cd tomcat/bin
tar -xvf tomcat-native
cd tomcat-native
./configure --with-apr=/usr/local/apr/lib --with-java-home=/usr/lib/jvm/jdk-8u144-linux-x64/jdk1.8.0_144
make & make install

到此安装工作就全部完成了,如果要查看本机安装的java路径可以通过which java查看

配置apr

vi /etc/profile

在profile最前面加上 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr-1.6.2/lib

命令行输入 source /etc/profile 使之生效

新增APRConfig类

网上大部分讲解配置tomcat apr的文章,都只是讲了如何在独立tomcat服务上如何配置apr,只需要修改server.xml中的connnector 的protocol就可以了,对于springboot会稍微复杂些,需要增加一个apr配置类在启动的时候修改Embed的tomcat connector网络接入协议。

启动springboot

本以为这样做完后可以直接启动springboot打开apr模式了,可是启动会发现报错,而且这个错误会让你很费解,看错误提示报的应该是服务启动端口被占用,但是实际查下来这个只是表面现象不是根本原因。

打开debug后查看系统日志发现真正的原因是系统找不到apr的lib库。

看到这个错误提示一下子豁然开朗,赶紧在启动参数中加上apr的路径,重新启动。

启动成功后看到日志中打出了以下内容,则表示apr模式启动成功,开始享受APR带来的飞速感受吧。

源码demo git下载地址:https://github.com/feiweiwei/springcloud-sample.git

到此这篇关于Springboot Tomcat APR模式详解和实践的文章就介绍到这了,更多相关Springboot Tomcat APR模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatisPlus自动填充更新时间的示例代码

    mybatisPlus自动填充更新时间的示例代码

    本文主要介绍了mybatisPlus自动填充更新时间,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • SpringBoot快速构建应用程序方法介绍

    SpringBoot快速构建应用程序方法介绍

    这篇文章主要介绍了SpringBoot快速构建应用程序方法介绍,涉及SpringBoot默认的错误页面,嵌入式Web容器层面的约定和定制等相关内容,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • Java服务调用失败报Service com.oneinfinite.adflow.api.service.TestService未找到的解决方法

    Java服务调用失败报Service com.oneinfinite.adflow.api.service.T

    在Java开发中,服务调用是常见的操作,尤其是在微服务架构中,然而,服务调用过程中可能会遇到各种问题,下面我们来看看如何解决Service com.oneinfinite.adflow.api.service.TestService with version 0.0.0 not found的问题吧
    2025-03-03
  • Java版给爱人表白的玫瑰花程序代码

    Java版给爱人表白的玫瑰花程序代码

    这篇文章主要讲解了Java版给爱人表白的玫瑰花程序代码,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧
    2018-05-05
  • 实现Servlet程序的三种方法(小结)

    实现Servlet程序的三种方法(小结)

    这篇文章主要介绍了实现Servlet程序的三种方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • java实现的根据概率随机中奖测试类

    java实现的根据概率随机中奖测试类

    这篇文章主要介绍了java实现的根据概率随机中奖测试类,结合完整实例形式详细分析了java随机数实现概率运算相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • MyBatis-Plus实现字段自动填充功能的示例

    MyBatis-Plus实现字段自动填充功能的示例

    本文主要介绍了MyBatis-Plus实现字段自动填充功能的示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java实现将String转化为Int

    Java实现将String转化为Int

    这篇文章主要介绍了Java实现将String转化为Int方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 5个JAVA入门必看的经典实例

    5个JAVA入门必看的经典实例

    这篇文章主要为大家详细介绍了5个JAVA入门必看的经典实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • mybatis 延迟加载的深入理解

    mybatis 延迟加载的深入理解

    这篇文章主要介绍了mybatis 延迟加载的深入理解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01

最新评论