基于APR的Apache Tomcat本地库允许在生产环境中实现最佳性能,但未在java.library.path上找到
这是什么意思,我该如何提供APR库?
这句话的意思就是:“基于APR(Apache Portable Runtime)的 Apache Tomcat Native 库,可以在生产环境中实现最佳性能,但是该库在java.library.path路径下未找到。”
所提到的库被捆绑在特定于操作系统的dll文件(tcnative-1.dll),通过JNI进行加载。它允许Tomcat使用Java运行时无法提供的操作系统功能,例如sendfile、epoll、OpenSSL、系统状态等。即使没有这个库,Tomcat也可以正常运行,但对某些用例来说,使用本地库会更快。
如果您真的需要它,请下载tcnative-1.dll
(或Linux下的libtcnative.so
)并将其放入bin文件夹中,并在eclipse中Tomcat服务器的启动配置的系统属性中添加。
-Djava.library.path=c:\dev\tomcat\bin
如果您不是在运行生产服务器,那就不用担心这条信息。这是一个用于提高性能的库(在生产系统上使用)。来自Apache可移植运行时(APR)Tomcat本地库:
Tomcat可以使用Apache可移植运行库提供更高的可伸缩性、性能和更好的本地服务器技术集成。 Apache可移植运行时是Apache HTTP Server 2.x的核心,是一个高度可移植的库。 APR具有许多用途,包括访问高级IO功能(例如sendfile、epoll和OpenSSL)、操作系统级功能(随机数生成、系统状态等)和本地进程处理(共享内存、NT管道和Unix套接字)。
On RHEL Linux just issue:
yum install tomcat-native.x86_64
/注意:根据您的架构,64位或32位软件包的扩展名可能不同。
就这样。之后,您将在日志文件中找到下一个信息消息:
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
所有操作都比以前更快。
yum install tomcat-native
解决了我的问题。 - Isaac Betesh使用以下命令在Ubuntu服务器上安装本地库:
sudo apt-get install libtcnative-1
如果那个不起作用,需要安装tomcat-native:
安装Oracle java7:
安装tomcat apr:
安装tomcat tomcat-native:
我刚刚浏览了一下,并使用以下内容进行了配置:
Ubuntu 16.04
Tomcat 8.5.9
Apache2.4.25
APR 1.5.2
Tomcat-native 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
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
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
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
sudo pico /opt/tomcat/bin/setenv.sh
export LD_LIBRARY_PATH='$LD_LIBRARY_PATH:/usr/local/apr/lib'
sudo service tomcat restart
relocation R_X86_64_32 against
.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` - Agnibha$ 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 > 打开启动配置 > Arguments选项卡 > VM参数)。
-Djava.library.path=/usr/local/opt/tomcat-native/lib
libapr1-dev
来修复它:apt-get install libtcnative-1 libapr1-dev
我也遇到了这个问题。如果你确实已经安装了相关的库,但是还是出现了这个错误,那么可能是配置错误。你的 server.xml
文件可能缺少以下行:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
(或者,它可以被注释掉)。这个<Listener>
和其他监听器一样,是顶层<Server>
的子元素。
如果没有<Listener>
行,则不会尝试加载APR库,因此LD_LIBRARY_PATH
和-Djava.library.path=
设置将被忽略。
最初的回答
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>
针对未来的读者: 当我尝试在Spring STS中运行一个Spring Boot应用程序时,我自己也遇到了这个问题。最初这个问题没有再次出现。我能够在我的项目上工作相当长的一段时间,直到有一天我开始遇到这个特定的错误。
据我所记,我没有对我的项目进行任何配置更改,也没有更改使用的Java/Tomcat版本。
关于安装tomcat本地库的讨论/建议对我来说都没有意义,因为该项目之前已经正常工作。
解决方案:
最后,我想尝试删除并重新导入我的项目。
我从Spring STS中删除了我的项目,重启了Spring STS,然后重新导入了项目。它像魔法一样工作,并且从那以后再也没有遇到过这个问题。
您也可以尝试在重新启动IDE和重新导入项目之前删除项目中生成的任何IDE文件/文件夹(如果有)。
我时不时地仍在这个项目上工作,目前还没有遇到过这个问题。我的当前开发IDE是IntelliJ。
我不确定错误是否与IDE有关。