针对tomcat [/usr/lib64:/lib64:/lib:/usr/lib]上找不到基于APR的Apache Tomcat本机库的处理方法
问题描述:
org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 在java.library.path:[/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]上找不到基于APR的Apache Tomcat本机库,该库允许在生产环境中获得最佳性能
环境centos7
解决方法:
一.需要下载Tomcat Native
地址:https://tomcat.apache.org/download-native.cgi
1.1 Source Distributions
Source Distributions(源码发行版)是包含源代码的包,需自行编译后才能使用;
1.2 Binary Distributions
Binary Distributions(二进制发行版)是已编译好的可直接运行的包,无需额外编译步骤。
二. 具体操作
2.1 下载源码版本
下载tar.gz
2.2 前置安装条件
只介绍通过下载离线安装包的方式进行安装(直接安装较为简单可自行查阅资料)
前置条件为apr-devel,openssl-devel
下面离线下载命令会自行下载相关依赖安装包
2.2.1 下载包和相关依赖(如果服务器已经有的依赖不下载)
yum install --downloadonly --downloaddir=/usr/local/RPM apr-devel
yum install --downloadonly --downloaddir=/usr/local/RPM openssl-devel
2.2.2 下载包和相关依赖(包和所有依赖都下载)
yumdownloader --destdir /usr/local/RPM2 --resolve apr-devel
yumdownloader --destdir /usr/local/RPM2 --resolve openssl-devel
2.2.3 安装
验证是否已经安装过
ls -ls /usr/bin/openssl(已安装)
ls -ls /usr/bin/apr-1-config (未安装)
安装需要的安装包
yum localinstall /usr/local/RPM2/*.rpm
rpm -qa | grep apr(查询)
2.2.4 编译tomcat-native
前置条件:
查询服务器jdk路径
(1)echo $JAVA_HOME
若输出为空或报错,则说明未配置;若显示路径(如/usr/lib/jvm/java-11-openjdk
),则已配置
如果未配置$JAVA_HOME则可通过以下命令查找JDK路径:
which java
ls -lrt /usr/bin/java
ls -lrt /etc/alternatives/java
readlink -f $(which java)
这些命令会返回Java可执行文件的真实路径(如/usr/lib/jvm/java-11-openjdk-amd64/bin/java
),其父目录即为JAVA_HOME
候选值
输入$JAVA_HOME/bin/java -version
(2)开始配置编译环境
cd tomcat-native-2.0.9-src/native/
运行 ./configure \
--with-apr=/usr/bin/apr-1-config \
--with-java-home=/usr/jdk1.8.0_261 \
--with-ssl=yes
如果出现报错:
configure: error: Found APR 1.4.8. You need version 1.7.0 or newer installed.
当前系统APR版本为1.4.8,而Tomcat Native 2.0.9要求至少1.7.0版本。版本太低导致
(3)升级APR
下载地址
https://apr.apache.org/download.cgi
输入:tar zxvf apr-1.7.6.tar.gz 解压
cd tar zxvf apr-1.7.6
./configure --prefix=/usr/local/source_code/apr
****命令组成解析*****
-
./configure
源代码编译的配置脚本,用于检测系统环境(如编译器、依赖库等)并生成适配当前系统的Makefile。 -
--prefix=/usr/local/
source_code
/apr
关键安装路径参数,指定软件所有文件的安装根目录为/usr/local/source_code/apr
。效果包括:-
二进制文件安装到
/usr/local/source_code/apr/bin
-
库文件安装到
/usr/local/source_code/apr/lib
-
头文件安装到
/usr/local/source_code/apr/include
。
-
结合之前编译APR和Tomcat Native的经历:
-
该命令用于将新版APR 1.7.0安装到独立目录,避免覆盖系统默认的旧版APR 1.4.8。
-
后续编译Tomcat Native时,需通过
--with-apr=/usr/local/apr/bin/apr-1-config
引用此路径。
路径选择的注意事项
路径类型 | 典型用途 | 用户案例中的意义 |
---|---|---|
| 自定义安装的软件 | 集中管理手动编译的APR组件 |
| 系统包管理器安装的软件 | 原有旧版APR的默认位置 |
继续编译发现openssl版本也低,但是升级的话可能会导致其他变动,最后决定降Tomcat Native版本为1.2.14
https://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.2.12/source/
运行:
./configure \
--with-apr=/usr/local/source_code/apr/bin/apr-1-config \
--with-java-home=/usr/jdk1.8.0_261 \
--with-ssl=/usr/include/openssl
成功如图
编译:make && make install
验证:ls /usr/local/apr/lib
拷贝:
cp /usr/local/apr/lib/libtcnative-1.so /usr/lib/
启动tomcat
成功