【Tomcat】为Tomcat服务配置本地Apr库以提升性能

关于 apr 和 apr-util 对 Tomcat 服务的性能提升的说明:

要测APR给tomcat带来的好处最好的方法是在慢速网络上(模拟Internet),将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待。但是配上APR之后,并发的线程数量明显下降,从原来的300可能会马上下降到只有几十,新的请求会毫无阻塞的进来。APR对于Tomcat最大的作用就是socket调度。你在局域网环境测,就算是400个并发,也是一瞬间就处理/传输完毕,但是在真实的Internet环境下,页面处理时间只占0.1%都不到,绝大部分时间都用来页面传输。如果不用APR,一个线程同一时间只能处理一个用户,势必会造成阻塞。所以生产环境下用apr是非常必要的。【本段文字描述引用于 Andy2019 CSDN博客】

Apache Tomcat 服务在默认情况下的启动,在 logs/catalina.out 日志里面会打印下面一行日志:

objectivec 复制代码
17-Oct-2023 09:11:04.347 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 在java.library.path:[/usr/local/apr/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]上找不到
基于APR的Apache Tomcat本机库,该库允许在生产环境中获得最佳性能

为了解决这个问题,我们需要在服务器上下载和安装 Apr 库(包括apr、apr-iconv、apr-util),以及 Tomcat 自带的tomcat-native。

这里使用的是Apache官方最新的 Apr 相关源码包,下载地址如下:

tomcat-native包在Tomcat的安装目录的bin目录下,

objectivec 复制代码
# ls -ltr tomcat-native.tar.gz
-rwxr--r-- 1 root root 438209 10月 12 08:55 tomcat-native.tar.gz
# pwd
/root/apache-tomcat-8.5.95/bin

将下载的 Apr 源码包上传到服务器,并解压、编译和安装:

objectivec 复制代码
# tar -xzf apr-1.7.4.tar.gz
# cd apr-1.7.4/
# ./configure --prefix=/usr/local/apr
# make
# make install

安装成功的截图:

安装apr-iconv和apr-util

objectivec 复制代码
# tar -xzf apr-iconv-1.2.2.tar.gz
# cd apr-iconv-1.2.2/
# ./configure --with-apr=/usr/local/apr --prefix=/usr/local/apr-iconv
# make 
# make install

# tar -xzf apr-util-1.6.3.tar.gz
# cd apr-util-1.6.3/
# ./configure --with-apr=/usr/local/apr --prefix=/usr/local/apr-util
# make
# make install

备注:安装apr-util的时候,make如果报下面的错误,需要安装:expat-devel

objectivec 复制代码
1.6.3/include/private  -I/usr/local/apr/include/apr-1    -o xml/apr_xml.lo -c xml/apr_xml.c && touch xml/apr_xml.lo
xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory
 #include <expat.h>
                   ^
compilation terminated.
make[1]: *** [xml/apr_xml.lo] 错误 1
make[1]: 离开目录"/root/apr-util-1.6.3"
make: *** [all-recursive] 错误 1
objectivec 复制代码
# yum install -y expat-devel

安装成功的截图:

安装成功后,在系统环境变量(如:/root/.bash_profile)里面增加下面的配置,并写source 使生效。

objectivec 复制代码
LD_LIBRARY_PATH=/usr/local/apr/lib
export LD_LIBRARY_PATH

安装编译tomcat-native

objectivec 复制代码
# cd apache-tomcat-8.5.95/bin
# ls -ltr tomcat-native.tar.gz 
-rwxr--r-- 1 root root 438209 10月 12 08:55 tomcat-native.tar.gz
# tar -xzf tomcat-native.tar.gz
# cd tomcat-native-1.2.39-src/native
# ./configure --with-apr=/usr/local/apr
# make 
# make install

安装成功的截图:

重启Tomcat服务,在catalina.out文件中打印出下面的日志记录,说明Apr环境安装成功

objectivec 复制代码
17-Oct-2023 09:13:31.222 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 使用APR版本[1.7.4]加载了基于APR的Apache Tomcat本机库[1.2.39]。
17-Oct-2023 09:13:31.222 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR功能:IPv6[true]、sendfile[true]、accept filters[false]、random[true]、UDS [{4}]。
17-Oct-2023 09:13:31.222 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL配置:useAprConnector[false],useOpenSSL[true]

参考:

https://apr.apache.org/download.cgi

https://cloud.tencent.com/developer/article/1504180

https: //blog.csdn.net/Andy2019/article/details/79373050

https://blog.csdn.net/weixin_43930641/article/details/105269092

相关推荐
java1234_小锋14 小时前
MyBatis中XML映射有哪些标签?
xml·tomcat·mybatis
我登哥MVP14 小时前
【SpringMVC笔记】 - 11 - SpringMVC 执行流程
java·spring boot·笔记·spring·tomcat·intellij-idea
seven97_top18 小时前
Tomcat的架构设计和启动过程详解
java·tomcat
小书房2 天前
搭建本地的源码查询服务器
运维·服务器·tomcat·opengrok·代码查询
天码-行空2 天前
深入拆解Tomcat架构:多层容器设计原理
java·架构·tomcat
工业甲酰苯胺2 天前
Tomcat的事件监听机制:观察者模式
java·观察者模式·tomcat
低客的黑调2 天前
MyBatis-Plus-从 CRUD 到高级特性
java·servlet·tomcat
天码-行空3 天前
深入拆解 Tomcat 系统架构:连接器如何设计
java·系统架构·tomcat
我登哥MVP3 天前
【SpringMVC笔记】 - 10 - 拦截器(Interceptor)
java·spring boot·spring·servlet·tomcat·maven
YaBingSec3 天前
玄机靶场-第三届-长城杯-初赛-SnakeBackdoor WP
java·运维·笔记·tomcat·ssh