Was bedeutet "Die APR-basierte Apache Tomcat Native-Bibliothek wurde nicht gefunden"?

104

Ich verwende Tomcat 7 in Eclipse unter Windows. Beim Starten von Tomcat wird folgende Infomeldung angezeigt:

Die APR-basierte Apache Tomcat Native-Bibliothek, die eine optimale Leistung in Produktionsumgebungen ermöglicht, wurde im Pfad java.library.path nicht gefunden

Was bedeutet das und wie kann ich die APR-Bibliothek bereitstellen?

fresh_dev
quelle

Antworten:

119

Es bedeutet genau das, was es sagt: "Die APR-basierte Apache Tomcat Native-Bibliothek, die eine optimale Leistung in Produktionsumgebungen ermöglicht, wurde im java.library.path nicht gefunden."

Die Bibliothek, auf die verwiesen wird, ist in einer betriebssystemspezifischen DLL (tcnative-1.dll) gebündelt, die über JNI geladen wird. Damit kann Tomcat Betriebssystemfunktionen verwenden, die in der Java Runtime nicht bereitgestellt werden (z. B. Sendedatei, Epoll, OpenSSL, Systemstatus usw.). Tomcat läuft ohne es einwandfrei, aber in einigen Anwendungsfällen ist es mit den nativen Bibliotheken schneller.

Wenn Sie es wirklich wollen, laden Sie das tcnative-1.dll(oder libtcnative.sofür Linux) herunter, legen Sie es im Ordner bin ab und fügen Sie der Startkonfiguration des Tomcat-Servers in Eclipse eine Systemeigenschaft hinzu.

 -Djava.library.path=c:\dev\tomcat\bin
GreyFairer
quelle
1
+1 Ich habe diesen Fehler (gepostet von OP) nur unter Eclipse erhalten, obwohl er behoben wurde, als ich ihn eigenständig ausführte (natürlich nach dem Hinzufügen der nativen Bibliothek). Vielen Dank für den Tipp zum Festlegen der Systemeigenschaft!
Asgs
7
Gibt es eine Möglichkeit, die Funktion zu deaktivieren, ohne die DLL-Datei hinzuzufügen? @ Greyfairer
Koray Tugay
2
@greyfairer wie wäre es mit IntelliJ IDEA unter Mac OS?
Flugzeug
1
Das jboss-native Paket für macosx enthält libtcnative: jbossweb.jboss.org/downloads/jboss-native-2-0-10 , ich denke, es ist dasselbe, portiert auf MacOS?
GreyFairer
1
Wir hatten ein Problem mit der nativen Installation von Tomcat unter MacOSX unter Tomcat 8.0.47. Wir haben die nativen Bibliotheken erfolgreich erstellt, indem wir die Optionen --prefix, --with-ssl und -with-apr angegeben haben. Das Problem war, dass die Binärdateien in den Ordner "lib" von Tomcat und nicht in den Ordner "bin" kopiert wurden. Verschieben Sie sie einfach in "bin" und es könnte funktionieren
maddob
31

Machen Sie sich keine Sorgen um diese Meldung, es sei denn, Sie betreiben einen Produktionsserver. Dies ist eine Bibliothek, die zur Verbesserung der Leistung (auf Produktionssystemen) verwendet wird. Aus der auf Apache Portable Runtime (APR) basierenden nativen Bibliothek für Tomcat :

Tomcat kann die Apache Portable Runtime verwenden, um überlegene Skalierbarkeit, Leistung und bessere Integration in native Servertechnologien bereitzustellen. Die Apache Portable Runtime ist eine hoch portable Bibliothek, die das Herzstück von Apache HTTP Server 2.x bildet. APR hat viele Verwendungsmöglichkeiten, einschließlich des Zugriffs auf erweiterte E / A-Funktionen (wie Sendedatei, Epoll und OpenSSL), Funktionen auf Betriebssystemebene (Zufallszahlengenerierung, Systemstatus usw.) und native Prozessbehandlung (gemeinsam genutzter Speicher, NT-Pipes und Unix-Sockets).

Matthew Farwell
quelle
28

Unter RHEL Linux nur Problem:

yum install tomcat-native.x86_64

/ Hinweis: Abhängig von Ihrer Architektur können 64-Bit- oder 32-Bit-Pakete unterschiedliche Erweiterungen haben. /

Das ist alles. Danach finden Sie in der Protokolldatei die nächste Informationsmeldung:

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

Alle Operationen werden spürbar schneller als zuvor sein.

user911734
quelle
2
Zumindest für CentOS 7 wurde es in den Standard-Repos nicht gefunden. Es war jedoch in EPEL, also wird es nach der Installation von epel-release installiert.
Mike Gleason
2
Für CentOS 7 wurde yum install tomcat-nativedies für mich
behoben
22

Installieren Sie die native Bibliothek auf einem Ubuntu-Server mit:

sudo apt-get install libtcnative-1

Wenn dies nicht funktioniert, muss tomcat-native installiert werden

  1. Installieren Sie Oracle Java7:

    • sudo add-apt-repository ppa: webupd8team / java
    • sudo apt-get update
    • sudo apt-get install oracle-java7-installer
    • sudo apt-get install oracle-java7-set-default
  2. Installieren Sie Tomcat Apr:

  3. Installieren Sie tomcat tomcat-native:

Amadu Bah
quelle
1
Ich habe alle ausprobiert, aber nichts funktioniert. Ich erhalte immer wieder 'Das konfigurierte Protokoll [org.apache.coyote.http11.Http11AprProtocol] erfordert den APR / die native Bibliothek, die nicht verfügbar ist'. Sogar der Befehl "ant jar" hat die Datei tomcat-native-1.1.33-dev.jar in mein Verzeichnis tomcat / lib kopiert.
Coladict
Sie müssen die resultierende .so-Datei in dieses Verzeichnis oder genauer gesagt in java.library.path kopieren.
Demonkoryu
9

Ich habe das gerade durchgesehen und es wie folgt konfiguriert:

Ubuntu 16.04

Tomcat 8.5.9

Apache2.4.25

APR 1.5.2

Tomcat-native 1.2.10

Java 8

Dies sind die Schritte, die ich basierend auf den älteren Beiträgen hier verwendet habe:

Installationspaket

sudo apt-get update
sudo apt-get install libtcnative-1

Stellen Sie sicher, dass diese Pakete installiert sind

sudo apt-get install make 
sudo apt-get install gcc
sudo apt-get install openssl

Installationspaket

sudo apt-get install libssl-dev

Installieren und kompilieren Sie 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

Überprüfen Sie die Installation

cd /usr/local/apr/lib/
ls 

Sie sollten die kompilierte Datei als sehen

libapr-1.la

Laden Sie das Tomcat Native-Quellpaket herunter und installieren Sie es

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

Überprüfen Sie 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

Bearbeiten Sie die Datei /opt/tomcat/bin/setenv.sh mit der folgenden Zeile:

sudo pico /opt/tomcat/bin/setenv.sh
export LD_LIBRARY_PATH='$LD_LIBRARY_PATH:/usr/local/apr/lib'

Tomcat neu starten

sudo service tomcat restart

Russell Rottach
quelle
Ich habe diesen Fehler `Umzug R_X86_64_32 gegen.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

auf debian 8 behebe ich es mit der installierung libapr1-dev:

apt-get install libtcnative-1 libapr1-dev
Hasan Ramezani
quelle
5

Hatte auch dieses Problem. Wenn Sie zwar über die Bibliotheken verfügen, diesen Fehler jedoch weiterhin haben, liegt möglicherweise ein Konfigurationsfehler vor. server.xmlMöglicherweise fehlt Ihnen die folgende Zeile:

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

(Alternativ kann es auskommentiert werden). Dies ist <Listener>, wie andere Zuhörer, ein Kind der obersten Ebene <Server>.

Ohne die <Listener>Linie, gibt es keinen Versuch , die April - Bibliothek zu laden, so LD_LIBRARY_PATHund -Djava.library.path=Einstellungen ignoriert werden.

MSalters
quelle
Sie, Sir, sind die Besten. Nach stundenlangem Auftragen der Stirn auf die Tastatur stellte sich heraus, dass ich APR / Native die ganze Zeit korrekt installiert hatte. Es war ein einfaches Problem mit server.xml!
unsterbliches Quetschen
3

Unter 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.

Fügen Sie es dann zu den Tomcat-Argumenten der Eclipse hinzu (doppelklicken Sie auf Server> Startkonfiguration öffnen > Registerkarte Argumente> VM-Argumente ).

-Djava.library.path=/usr/local/opt/tomcat-native/lib
Ryan Wibawa
quelle
1

Ich hatte dieses Problem beim Upgrade von Java 8 auf 11 . Nach dem Hinzufügen dieser Abhängigkeit wurde meine App ohne Probleme gestartet:

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.25.0-GA</version>
</dependency>
Stephen Paul
quelle
0

Ich hatte das gleiche Problem, als Tomсat die Klasse nicht finden konnte. Versuchen Sie, andere Protokolldateien anzuzeigen. Manchmal wird in verschiedenen Protokolldateien kein Fehler beim Auffinden einer Klasse angezeigt:

  • tomcat8-stdout
  • tomcat8-stderr
  • localhost
Koss
quelle
0

Wenn Sie keine Tomcat Native-Bibliothek haben, installieren Sie diese mit:

sudo apt-get install libtcnative-1

und wenn es noch da ist, aktualisiere es mit einer alten Version mit:

sudo apt-get upgrade libtcnative-1

Dejan
quelle
0

Mein Problem war das Hinzufügen einer Bibliothek von Tomcat zum Eclipse-Klassenpfad. Ich gehe einfach zu Eclipse. Klicken Sie rechts, um zu projizieren, und debug configuration -> classpath -> Add External JARsalle JAR-Dateien hinzuzufügen. apache-tomcat-7.0.35\binDies war mein Problem und es hat bei mir funktioniert.
Geben Sie hier die Bildbeschreibung ein

Abd Abughazaleh
quelle