“未找到基于 APR 的 Apache Tomcat 本机库”是啥意思?
Posted
技术标签:
【中文标题】“未找到基于 APR 的 Apache Tomcat 本机库”是啥意思?【英文标题】:What does "The APR based Apache Tomcat Native library was not found" mean?“未找到基于 APR 的 Apache Tomcat 本机库”是什么意思? 【发布时间】:2012-02-01 17:28:49 【问题描述】:我在 Windows 上的 Eclipse 中使用 Tomcat 7。启动 Tomcat 时,我收到以下信息消息:
在 java.library.path 中找不到基于 APR 的 Apache Tomcat Native 库,该库可在生产环境中实现最佳性能
这是什么意思,我该如何提供 APR 库?
【问题讨论】:
【参考方案1】:这正是它所说的:“在 java.library.path 上找不到基于 APR 的 Apache Tomcat Native 库,它允许在生产环境中获得最佳性能”
引用的库被捆绑到通过 JNI 加载的操作系统特定的 dll (tcnative-1.dll) 中。它允许 tomcat 使用 Java Runtime 中未提供的 OS 功能(例如 sendfile、epoll、OpenSSL、系统状态等)。没有它,Tomcat 也可以正常运行,但对于某些用例,使用本机库会更快。
如果你真的想要,下载tcnative-1.dll
(or libtcnative.so
for Linux)放到bin文件夹,在eclipse中tomcat服务器的启动配置中添加系统属性。
-Djava.library.path=c:\dev\tomcat\bin
【讨论】:
+1 我只在 Eclipse 下收到此错误(由 OP 发布),尽管它在我独立运行时已修复(当然,在添加本机库之后)。感谢有关设置的提示系统属性! 是否有在不添加 .dll 文件的情况下禁用该功能? @greyfairer @greyfairer Mac OS 下的 IntelliJ IDEA 怎么样? macosx的jboss-native包里有libtcnative:jbossweb.jboss.org/downloads/jboss-native-2-0-10,我猜是一样的东西,移植到MacOS? 我们在 Tomcat 8.0.47 上的 MacOSX 上安装 tomcat-native 时遇到问题。我们通过指定选项--prefix、--with-ssl 和-with-apr 成功构建了本机库。问题是二进制文件被复制到tomcat的“lib”文件夹,而不是“bin”文件夹。只需将它们移动到“bin”,它可能会起作用【参考方案2】:除非您正在运行生产服务器,否则不要担心此消息。这是一个用于提高性能的库(在生产系统上)。来自Apache Portable Runtime (APR) based Native library for Tomcat:
Tomcat 可以使用 Apache Portable Runtime 提供卓越的 可扩展性、性能以及与本机服务器的更好集成 技术。 Apache Portable Runtime 是一个高度可移植的库 这是 Apache HTTP Server 2.x 的核心。 APR有很多用途, 包括访问高级 IO 功能(例如 sendfile、epoll 和 OpenSSL)、操作系统级功能(随机数生成、系统 状态等)和本地进程处理(共享内存、NT 管道和 Unix 套接字)。
【讨论】:
【参考方案3】:在 RHEL Linux 上只需发出:
yum install tomcat-native.x86_64
/注意:根据您的架构 64 位或 32 位包可能有不同的扩展名/
就是这样。之后,您将在日志文件中找到下一条信息性消息:
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
所有操作都将明显比以前更快。
【讨论】:
至少对于 CentOS 7,在默认存储库中找不到它。但是,它在 EPEL 中,所以在执行 yum install epel-release 之后,它会安装。 对于 CentOS 7,yum install tomcat-native
为我解决了这个问题【参考方案4】:
在 Ubuntu 服务器上安装本机库:
sudo apt-get install libtcnative-1
如果这不起作用,则需要安装 tomcat-native
安装Oracle java7:
sudo add-apt-repository ppa:webupd8team/java sudo apt-get 更新 sudo apt-get install oracle-java7-installer sudo apt-get install oracle-java7-set-default安装tomcat apr:
wget http://apache.mirror.anlx.net//apr/apr-1.5.0.tar.gz tar zxvf apr-1.5.0.tar.gz rm apr-1.5.0.tar.gz cd apr-1.5.0 sudo ./configure 须藤制作 sudo make install 导出 LD_LIBRARY_PATH='$LD_LIBRARY_PATH:/usr/local/apr/lib'安装tomcat tomcat-native:
wget http://mirrors.ukfast.co.uk/sites/ftp.apache.org//tomcat/tomcat-connectors/native/1.1.29/source/tomcat-native-1.1.29-src.tar.gz tar zxvf tomcat-native-1.1.29-src.tar.gz rm tomcat-native-1.1.29-src.tar.gz cd tomcat-native-1.1.29-src/jni/native JAVA_HOME=/usr/lib/jvm/java-7-oracle sudo ./configure --with-apr=/usr/local/apr --with-java-home=$JAVA_HOME 须藤制作 sudo make install【讨论】:
我尝试了所有这些,但没有任何效果。我不断收到“配置的协议 [org.apache.coyote.http11.Http11AprProtocol] 需要不可用的 APR/native 库”。甚至做了“ant jar”命令并将tomcat-native-1.1.33-dev.jar复制到我的tomcat/lib目录中。 您需要将生成的 .so 文件复制到该目录,或者更具体地说,复制到 java.library.path。【参考方案5】:我刚刚完成并配置了以下内容:
Ubuntu 16.04
Tomcat 8.5.9
Apache2.4.25
1.5.2 年 4 月
Tomcat 原生 1.2.10
Java 8
这些是我根据这里的旧帖子使用的步骤:
安装包
sudo apt-get update
sudo apt-get install libtcnative-1
验证这些软件包是否已安装
sudo apt-get install make
sudo apt-get install gcc
sudo apt-get install openssl
安装包
sudo apt-get install libssl-dev
安装和编译 Apache APR
cd /opt/tomcat/bin
sudo wget http://apache.mirror.anlx.net//apr/apr-1.5.2.tar.gz
sudo tar -xzvf apr-1.5.2.tar.gz
cd apr-1.5.2
sudo ./configure
sudo make
sudo make install
验证安装
cd /usr/local/apr/lib/
ls
你应该看到编译后的文件
libapr-1.la
下载安装Tomcat Native源码包
cd /opt/tomcat/bin
sudo wget https://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.2.10/source/tomcat-native-1.2.10-src.tar.gz
sudo tar -xzvf tomcat-native-1.2.10-src.tar.gz
cd tomcat-native-1.2.10-src/native
验证 JAVA_HOME
sudo pico ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
source ~/.bashrc
sudo ./configure --with-apr=/usr/local/apr --with-java-home=$JAVA_HOME
sudo make
sudo make install
使用以下行编辑 /opt/tomcat/bin/setenv.sh 文件:
sudo pico /opt/tomcat/bin/setenv.sh
export LD_LIBRARY_PATH='$LD_LIBRARY_PATH:/usr/local/apr/lib'
重启tomcat
sudo service tomcat restart
【讨论】:
我遇到这个错误`重定位 R_X86_64_32 针对.rodata' can not be used when making a shared object; recompile with -fPIC /usr/local/ssl/lib/libssl.a: error adding symbols: Bad value collect2: error: ld returned 1 exit status make[1]: *** [libtcnative-1.la] Error 1
【参考方案6】:
在 debian 8 上,我通过安装 libapr1-dev
来修复它:
apt-get install libtcnative-1 libapr1-dev
【讨论】:
【参考方案7】:在 Mac OS X 上:
$ brew install tomcat-native
==> tomcat-native
In order for tomcat's APR lifecycle listener to find this library, you'll
need to add it to java.library.path. This can be done by adding this line
to $CATALINA_HOME/bin/setenv.sh
CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/opt/tomcat-native/lib"
If $CATALINA_HOME/bin/setenv.sh doesn't exist, create it and make it executable.
然后将其添加到 eclipse 的 tomcat 参数中(双击 Server > Open Launch Configuration > Arguments tab > VM arguments)
-Djava.library.path=/usr/local/opt/tomcat-native/lib
【讨论】:
【参考方案8】:也有这个问题。如果您确实拥有这些库,但仍然出现此错误,则可能是配置错误。您的 server.xml
可能缺少以下行:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
(或者,它可以被注释掉)。这个<Listener>
,和其他听众一样,是***<Server>
的子级。
如果没有 <Listener>
行,则不会尝试加载 APR 库,因此会忽略 LD_LIBRARY_PATH
和 -Djava.library.path=
设置。
【讨论】:
您,先生,是最棒的。在将前额应用到键盘几个小时后,我发现我一直都正确安装了 APR/Native。这是一个简单的 server.xml 问题!【参考方案9】:我遇到了这个问题从 Java 8 升级到 11。添加此依赖项后,我的应用程序启动没有问题:
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>
【讨论】:
【参考方案10】:当 tomсat 找不到课程时,我遇到了同样的问题。尝试查看其他日志文件。有时在不同的日志文件中会出现 No class def found 错误:
tomcat8-stdout tomcat8-stderr 本地主机【讨论】:
【参考方案11】:如果您没有 Tomcat Native 库,请安装:
sudo apt-get install libtcnative-1
如果它仍然存在旧版本,请升级:
sudo apt-get upgrade libtcnative-1
【讨论】:
【参考方案12】:我的问题是将一些库从 tomcat 添加到 eclipse 类路径中,我只是要去
eclipse 单击右键进行项目并转到 debug configuration -> classpath -> Add External JARs
添加来自 apache-tomcat-7.0.35\bin
的所有 jars 文件这是我的问题,它对我有用。
【讨论】:
【参考方案13】:对于未来的读者: 当我尝试在 Spring STS 中运行 Spring Boot 应用程序时,我自己也遇到过这个问题。这个问题最初并没有重新出现。我能够在很长一段时间内毫无问题地处理我的项目,直到有一天我开始遇到这个特定错误。
据我所知,我没有对我的项目进行任何配置更改,也没有更改正在使用的 Java/Tomcat 版本。
关于安装 tomcat 原生库的讨论/建议对我来说没有任何意义,因为该项目之前已经运行良好。
对我有用的解决方案:
所以最后我想尝试删除并重新导入我的项目。
我从 Spring STS 删除我的项目,重新启动 Spring STS,然后重新导入该项目。它就像一个魅力,从那以后就再也没有遇到过这个问题。
在重新启动 IDE 并重新导入项目之前,您还可以尝试删除项目中任何 IDE 生成的文件/文件夹(如果有的话)。
我仍然碰巧不时从事这个项目,到目前为止还没有遇到过这个问题。我目前的开发 IDE 是 IntelliJ。
我不确定错误是否是特定于 IDE 的。
【讨论】:
以上是关于“未找到基于 APR 的 Apache Tomcat 本机库”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章