“未找到基于APR的Apache Tomcat本机库”是什么意思?


104

我正在Windows的Eclipse中使用Tomcat 7。启动Tomcat时,我收到以下信息消息:

在java.library.path上找不到基于APR的Apache Tomcat本机库,该库可在生产环境中实现最佳性能。

这是什么意思,我该如何提供APR库?

Answers:


119

它的意思完全是它的意思:“在java.library.path中找不到在生产环境中实现最佳性能的基于APR的Apache Tomcat本机库”

所引用的库捆绑到通过JNI加载的OS特定的dll(tcnative-1.dll)中。它允许tomcat使用Java运行时中未提供的OS功能(例如sendfile,epoll,OpenSSL,系统状态等)。如果没有Tomcat,它将运行良好,但是对于某些用例,使用本机库将使其更快。

如果确实需要,请下载tcnative-1.dll(或libtcnative.so对于Linux)并将其放在bin文件夹中,然后在eclipse中将系统属性添加到tomcat服务器的启动配置中。

 -Djava.library.path=c:\dev\tomcat\bin

1
+1我仅在Eclipse下收到此错误(由OP发布),即使我独立运行它(当然,在添加本机lib之后)也已将其修复。)感谢您提供有关设置系统属性的提示!
asgs 2012年

7
无论如何,不​​添加.dll文件就禁用该功能?@greyfairer
Koray Tugay

2
@greyfairer在Mac OS下如何处理IntelliJ IDEA?
飞机

1
macosx的jboss-native软件包中有libtcnative:jbossweb.jboss.org/downloads/jboss-native-2-0-10,我想这是同一件事,移植到MacOS了吗?
GreyFairer

1
我们在Tomcat 8.0.47的MacOSX上安装了tomcat本机时遇到了问题。通过指定选项--prefix,-with-ssl和-with-apr,我们成功地构建了本地库。问题是二进制文件已复制到tomcat的“ lib”文件夹中,而不是复制到“ bin”文件夹中。只需将它们移到“ bin”,它可能会起作用
maddob

31

除非您正在运行生产服务器,否则请不要担心此消息。这是一个用于提高性能(在生产系统上)的库。从基于Apache可移植运行时(APR)的Tomcat本机库

Tomcat可以使用Apache Portable Runtime提供出色的可伸缩性,性能以及与本机服务器技术的更好集成。Apache Portable Runtime是一个高度可移植的库,它是Apache HTTP Server 2.x的核心。APR有许多用途,包括访问高级IO功能(例如sendfile,epoll和OpenSSL),操作系统级别的功能(生成随机数,系统状态等)和本机进程处理(共享内存,NT管道和Unix套接字)。


28

在RHEL Linux上,只需发出:

yum install tomcat-native.x86_64

/注意:根据您的体系结构,64位或32位程序包可能具有不同的扩展名/

就这些。之后,您将在日志文件中找到下一条参考消息:

INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].

所有操作将比以前明显更快。


2
至少对于CentOS 7,在默认存储库中找不到它。但是它在EPEL中,因此在执行yum install epel-release之后,它会安装。
Mike Gleason

2
对于CentOS 7,请yum install tomcat-native为我解决此问题
Isaac Betesh

22

使用以下命令在Ubuntu服务器上安装本机库:

sudo apt-get install libtcnative-1

如果不起作用,则需要安装tomcat-native

  1. 安装Oracle java7:

    • sudo add-apt-repository ppa:webupd8team / java
    • sudo apt-get更新
    • sudo apt-get安装oracle-java7-installer
    • sudo apt-get install oracle-java7-set-default
  2. 安装tomcat apr:

  3. 安装tomcat tomcat-native:


1
我尝试了所有这些,但没有任何效果。我不断收到“配置的协议[org.apache.coyote.http11.Http11AprProtocol]需要APR /本机库不可用”。甚至执行了“ ant jar”命令,并将tomcat-native-1.1.33-dev.jar复制到了我的tomcat / lib目录中。
coladict 2015年

您需要将生成的.so文件复制到该目录,或更具体地说,复制到java.library.path。
demonkoryu

9

我只是经历了此过程,并使用以下命令对其进行了配置:

Ubuntu 16.04

的Tomcat 8.5.9

阿帕奇2.4.25

年利率1.5.2

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
Agnibha


5

也有这个问题。如果您确实有这些库,但是仍然存在此错误,则可能是配置错误。您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问题!
不朽的压扁

3

在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选项卡> VM arguments

-Djava.library.path=/usr/local/opt/tomcat-native/lib

1

我遇到了从Java 8升级到11的问题。添加此依赖项后,我的应用程序启动没有问题:

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.25.0-GA</version>
</dependency>

0

当tomсat找不到课程时,我遇到了同样的问题。尝试查看其他日志文件。有时在不同的日志文件中不会出现找不到类定义的错误:

  • tomcat8-stdout
  • tomcat8-stderr
  • 本地主机

0

如果您没有Tomcat Native库,请使用以下方法安装它:

sudo apt-get install libtcnative-1

如果仍然存在旧版本,请使用以下命令对其进行升级:

sudo apt-get升级libtcnative-1


0

我的问题是在tomcat到eclipse类路径中添加了一些库,我只是要在Eclipse上单击鼠标右键来投影,然后从中debug configuration -> classpath -> Add External JARs添加所有jar文件,apache-tomcat-7.0.35\bin这是我的问题,对我来说这是可行的。
在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.