120

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

在 java.library.path 上找不到基于 APR 的 Apache Tomcat Native 库,它允许在生产环境中获得最佳性能

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

4

13 回答 13

129

它的意思正是它所说的:“在 java.library.path 上找不到基于 APR 的 Apache Tomcat Native 库,它允许在生产环境中获得最佳性能”

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

如果你真的想要它,下载tcnative-1.dll(或者libtcnative.so对于Linux)并将它放在bin文件夹中,并在eclipse中的tomcat服务器的启动配置中添加一个系统属性。

 -Djava.library.path=c:\dev\tomcat\bin
于 2012-01-03T19:58:10.203 回答
33

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

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

于 2012-01-03T19:21:35.327 回答
33

在 RHEL Linux 上只需发出:

yum install tomcat-native.x86_64

/注意:根据您的架构,64 位或 32 位包可能有不同的扩展名/

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

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

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

于 2013-11-15T16:02:38.973 回答
23

在 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 install oracle-java7-installer
    • sudo apt-get install oracle-java7-set-default
  2. 安装tomcat apr:

  3. 安装 tomcat tomcat-native:

于 2013-12-15T22:36:59.610 回答
13

我刚刚经历了这个并使用以下内容对其进行了配置:

Ubuntu 16.04

雄猫 8.5.9

Apache2.4.25

4 月 1.5.2 日

Tomcat 原生 1.2.10

爪哇 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

于 2016-12-22T20:26:36.557 回答
7

在 debian 8 上,我通过安装来修复它libapr1-dev

apt-get install libtcnative-1 libapr1-dev
于 2016-09-17T11:17:31.243 回答
6

在 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
于 2019-09-26T06:56:29.377 回答
5

也有这个问题。如果您确实有库,但仍然出现此错误,则可能是配置错误。您server.xml可能缺少以下行:

 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

(或者,它可以被注释掉)。这<Listener>与其他听众一样是顶级的孩子<Server>

如果没有该<Listener>行,则不会尝试加载 APR 库,因此LD_LIBRARY_PATH-Djava.library.path=忽略设置。

于 2017-02-07T15:02:26.587 回答
2

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

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.25.0-GA</version>
</dependency>
于 2019-06-03T10:51:37.670 回答
0

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

  • tomcat8-stdout
  • tomcat8-stderr
  • 本地主机
于 2015-06-12T06:01:29.190 回答
0

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

sudo apt-get install libtcnative-1

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

sudo apt-get 升级 libtcnative-1

于 2016-12-22T00:08:26.673 回答
0

我的问题是在将一些库从 tomcat 添加到 eclipse 类路径中,我只是要 eclipse 单击右键进行项目并从中debug configuration -> classpath -> Add External JARs添加所有 jars 文件,apache-tomcat-7.0.35\bin这是我的问题,它对我有用。
在此处输入图像描述

于 2020-02-19T22:05:31.733 回答
0

对于未来的读者:我自己在尝试在Spring STS中运行Spring Boot应用程序 时遇到了这个问题。这个问题最初并没有重新出现。我能够在很长一段时间内毫无问题地处理我的项目,直到有一天我开始遇到这个特殊错误。

据我所知,我没有对我的项目进行任何配置更改,也没有更改正在使用的 Java/Tomcat 版本。

关于安装tomcat 本机库的讨论/建议对我来说没有任何意义,因为该项目之前已经运行良好。

对我有用的解决方案:

所以最后我想尝试删除并重新导入我的项目。

我从 Spring STS 中删除了我的项目,重新启动了 Spring STS,然后重新导入了该项目。它就像一种魅力,从那以后就再也没有遇到过这个问题。

在重新启动 IDE 并重新导入项目之前,您还可以尝试删除项目中任何 IDE 生成的文件/文件夹(如果有的话)。

我仍然碰巧不时从事这个项目,到目前为止还没有遇到过这个问题。我目前的开发 IDE 是 IntelliJ。

我不确定该错误是否是特定于 IDE 的。

于 2021-06-28T15:18:48.733 回答