Cosa significa "La libreria nativa di Apache Tomcat basata su APR non è stata trovata"?


104

Sto usando Tomcat 7 in Eclipse su Windows. All'avvio di Tomcat, ricevo il seguente messaggio informativo:

La libreria nativa Apache Tomcat basata su APR che consente prestazioni ottimali negli ambienti di produzione non è stata trovata in java.library.path

Cosa significa e come posso fornire la libreria APR?

Risposte:


119

Significa esattamente quello che dice: "La libreria nativa Apache Tomcat basata su APR che consente prestazioni ottimali negli ambienti di produzione non è stata trovata in java.library.path"

La libreria a cui si fa riferimento è raggruppata in una dll specifica del sistema operativo (tcnative-1.dll) caricata tramite JNI. Consente a tomcat di utilizzare funzionalità del sistema operativo non fornite in Java Runtime (come sendfile, epoll, OpenSSL, stato del sistema, ecc.). Tomcat funzionerà perfettamente senza di esso, ma per alcuni casi d'uso sarà più veloce con le librerie native.

Se lo vuoi davvero, scarica il tcnative-1.dll(o libtcnative.soper Linux) e mettilo nella cartella bin, e aggiungi una proprietà di sistema alla configurazione di avvio del server tomcat in eclipse.

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

1
+1 Ho ricevuto questo errore (pubblicato da OP) solo in Eclipse, anche se è stato corretto quando l'ho eseguito in modalità standalone (ovviamente, dopo aver aggiunto la libreria nativa). Grazie per il suggerimento sull'impostazione della proprietà di sistema!
asgs

7
Esiste comunque per disabilitare la funzione senza aggiungere il file .dll? @greyfairer
Koray Tugay

2
@greyfairer che ne dici di IntelliJ IDEA su Mac OS?
aeromobili

1
C'è libtcnative nel pacchetto jboss-native per macosx: jbossweb.jboss.org/downloads/jboss-native-2-0-10 , immagino sia la stessa cosa, portato su MacOS?
GreyFairer

1
Si è verificato un problema con l'installazione nativa di Tomcat su MacOSX su Tomcat 8.0.47. Abbiamo costruito con successo le librerie native specificando le opzioni --prefix, --with-ssl e -with-apr. Il problema era che i file binari venivano copiati nella cartella "lib" di Tomcat e non nella cartella "bin". Basta spostarli in "bin" e potrebbe funzionare
maddob

31

A meno che tu non stia utilizzando un server di produzione, non preoccuparti di questo messaggio. Questa è una libreria che viene utilizzata per migliorare le prestazioni (sui sistemi di produzione). Dalla libreria nativa basata su Apache Portable Runtime (APR) per Tomcat :

Tomcat può utilizzare Apache Portable Runtime per fornire scalabilità, prestazioni e una migliore integrazione superiori con le tecnologie server native. Apache Portable Runtime è una libreria altamente portabile che è il cuore di Apache HTTP Server 2.x. APR ha molti usi, incluso l'accesso a funzionalità IO avanzate (come sendfile, epoll e OpenSSL), funzionalità a livello di sistema operativo (generazione di numeri casuali, stato del sistema, ecc.) E gestione dei processi nativi (memoria condivisa, pipe NT e socket Unix).


28

Su RHEL Linux basta emettere:

yum install tomcat-native.x86_64

/ Nota: a seconda dell'architettura, il pacchetto a 64 bit o 32 bit potrebbe avere un'estensione diversa /

Questo è tutto. Dopodiché troverai nel file di registro il prossimo messaggio informativo:

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

Tutte le operazioni saranno notevolmente più veloci di prima.


2
Almeno per CentOS 7, non è stato trovato nei repository predefiniti. Era in EPEL, tuttavia, quindi dopo aver eseguito yum install epel-release, si installa.
Mike Gleason

2
Per CentOS 7, yum install tomcat-nativerisolto questo problema per me
Isaac Betesh,

22

Installazione della libreria nativa sul server Ubuntu con:

sudo apt-get install libtcnative-1

Se non funziona, è necessario installare Tomcat-native

  1. Installa 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. Installa tomcat apr:

  3. Installa tomcat tomcat-native:


1
Ho provato tutti quelli, ma non funziona niente. Continuo a ricevere "Il protocollo configurato [org.apache.coyote.http11.Http11AprProtocol] richiede la libreria APR / nativa che non è disponibile". Anche il comando "ant jar" ha copiato tomcat-native-1.1.33-dev.jar nella mia directory tomcat / lib.
coladict

È necessario copiare il file .so risultante in quella directory o, più specificamente, in java.library.path.
demonkoryu

9

Ho appena eseguito questo e l'ho configurato con quanto segue:

Ubuntu 16.04

Tomcat 8.5.9

Apache2.4.25

APR 1.5.2

Nativo di Tomcat 1.2.10

Java 8

Questi sono i passaggi che ho utilizzato in base ai post precedenti qui:

Installa pacchetto

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

Verificare che questi pacchetti siano installati

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

Installa pacchetto

sudo apt-get install libssl-dev

Installa e compila 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

verificare l'installazione

cd /usr/local/apr/lib/
ls 

dovresti vedere il file compilato come

libapr-1.la

Scarica e installa il pacchetto sorgente 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

verifica 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

Modifica il file /opt/tomcat/bin/setenv.sh con la seguente riga:

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

riavvia tomcat

sudo service tomcat restart


Sto riscontrando questo errore `rilocazione R_X86_64_32 contro.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

su Debian 8 lo risolvo installando libapr1-dev:

apt-get install libtcnative-1 libapr1-dev

5

Ho avuto anche questo problema. Se fare avere le librerie, ma hanno ancora questo errore, può essere un errore di configurazione. Il tuo server.xmlpuò mancare la seguente riga:

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

(In alternativa, può essere commentato). Questo <Listener>, come altri ascoltatori, è figlio di primo livello <Server>.

Senza la <Listener>riga, non c'è alcun tentativo di caricare la libreria APR, quindi LD_LIBRARY_PATHe le -Djava.library.path=impostazioni vengono ignorate.


Lei, signore, è il migliore. Dopo ore di applicazione della fronte alla tastiera, risulta che APR / Native è stato installato correttamente per tutto il tempo. Era un semplice problema di server.xml!
squish immortale

3

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

Quindi aggiungilo agli argomenti Tomcat di eclipse ( fai doppio clic su Server> Apri configurazione di avvio > scheda Argomenti> Argomenti VM )

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

1

Ho avuto questo problema durante l' aggiornamento da Java 8 a 11 . Dopo aver aggiunto questa dipendenza, la mia app è stata avviata senza problemi:

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

0

Ho avuto lo stesso problema quando tomсat non riusciva a trovare la classe. Prova a visualizzare altri file di registro. A volte l'errore No class def found viene visualizzato in diversi file di registro:

  • tomcat8-stdout
  • tomcat8-stderr
  • localhost

0

Se non disponi della libreria Tomcat Native, installala con:

sudo apt-get install libtcnative-1

e se è ancora presente una vecchia versione aggiornala con:

sudo apt-get upgrade libtcnative-1


0

Il mio problema era nell'aggiungere una libreria da Tomcat al percorso di classe eclipse, ho appena fatto clic con il pulsante destro del mouse su Eclipse per proiettare e ho debug configuration -> classpath -> Add External JARsaggiunto tutti i file jar da apache-tomcat-7.0.35\binquesto era il mio problema e ha funzionato per me.
inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.