Que signifie «La bibliothèque native Apache Tomcat basée sur APR n'a pas été trouvée»?

104

J'utilise Tomcat 7 dans Eclipse sous Windows. Au démarrage de Tomcat, je reçois le message d'information suivant:

La bibliothèque native Apache Tomcat basée sur APR qui permet des performances optimales dans les environnements de production n'a pas été trouvée sur le fichier java.library.path

Qu'est-ce que cela signifie et comment puis-je fournir la bibliothèque APR?

fresh_dev
la source

Réponses:

119

Cela signifie exactement ce qu'il dit: "La bibliothèque Apache Tomcat Native basée sur APR qui permet des performances optimales dans les environnements de production n'a pas été trouvée sur le fichier java.library.path"

La bibliothèque mentionnée est intégrée dans une dll spécifique au système d'exploitation (tcnative-1.dll) chargée via JNI. Il permet à tomcat d'utiliser les fonctionnalités du système d'exploitation non fournies dans Java Runtime (telles que sendfile, epoll, OpenSSL, l'état du système, etc.). Tomcat fonctionnera très bien sans lui, mais pour certains cas d'utilisation, il sera plus rapide avec les bibliothèques natives.

Si vous le voulez vraiment, téléchargez le tcnative-1.dll(ou libtcnative.sopour Linux) et placez-le dans le dossier bin, et ajoutez une propriété système à la configuration de lancement du serveur tomcat dans eclipse.

 -Djava.library.path=c:\dev\tomcat\bin
GreyFairer
la source
1
+1 Je recevais cette erreur (publiée par OP) uniquement sous Eclipse, même si elle a été corrigée lorsque je l'exécute en mode autonome (bien sûr, après avoir ajouté la lib native.) Merci pour le conseil sur la définition de la propriété système!
asgs
7
Est-il possible de désactiver la fonctionnalité sans ajouter le fichier .dll? @greyfairer
Koray Tugay
2
@greyfairer et IntelliJ IDEA sous Mac OS?
avion
1
Il y a libtcnative dans le package jboss-native pour macosx: jbossweb.jboss.org/downloads/jboss-native-2-0-10 , je suppose que c'est la même chose, porté sur MacOS?
GreyFairer
1
Nous avons eu un problème avec l'installation native de tomcat sur MacOSX sur Tomcat 8.0.47. Nous avons construit les bibliothèques natives avec succès en spécifiant les options --prefix, --with-ssl et -with-apr. Le problème était que les binaires étaient copiés dans le dossier «lib» de tomcat, et non dans le dossier «bin». Il suffit de les déplacer vers « bin » et il pourrait fonctionner
maddob
31

Sauf si vous exécutez un serveur de production, ne vous inquiétez pas de ce message. Il s'agit d'une bibliothèque utilisée pour améliorer les performances (sur les systèmes de production). À partir de la bibliothèque native basée sur Apache Portable Runtime (APR) pour Tomcat :

Tomcat peut utiliser Apache Portable Runtime pour offrir une évolutivité, des performances et une meilleure intégration avec les technologies de serveur natives. Apache Portable Runtime est une bibliothèque hautement portable qui est au cœur d'Apache HTTP Server 2.x. APR a de nombreuses utilisations, y compris l'accès à des fonctionnalités d'E / S avancées (telles que sendfile, epoll et OpenSSL), des fonctionnalités au niveau du système d'exploitation (génération de nombres aléatoires, état du système, etc.) et la gestion native des processus (mémoire partagée, canaux NT et sockets Unix).

Matthew Farwell
la source
28

Sur RHEL Linux, émettez simplement:

yum install tomcat-native.x86_64

/ Remarque: selon votre architecture, le package 64 bits ou 32 bits peut avoir une extension différente /

C'est tout. Après cela, vous trouverez dans le fichier journal le message d'information suivant:

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

Toutes les opérations seront sensiblement plus rapides qu'auparavant.

user911734
la source
2
Pour CentOS 7 au moins, il n'a pas été trouvé dans les dépôts par défaut. C'était dans EPEL, cependant, après avoir installé yum epel-release, il s'installe.
Mike Gleason
2
Pour CentOS 7, yum install tomcat-nativecorrigé cela pour moi
Isaac Betesh
22

Installation de la bibliothèque native sur le serveur Ubuntu avec:

sudo apt-get install libtcnative-1

Si cela ne fonctionne pas, tomcat-native doit être installé

  1. Installez Oracle java7:

    • sudo add-apt-repository ppa: webupd8team / java
    • sudo apt-get mise à jour
    • sudo apt-get install oracle-java7-installer
    • sudo apt-get install oracle-java7-set-default
  2. Installez tomcat apr:

  3. Installez tomcat tomcat-native:

Amadu Bah
la source
1
J'ai essayé tous ceux-là, mais rien ne fonctionne. Je continue à obtenir «Le protocole configuré [org.apache.coyote.http11.Http11AprProtocol] nécessite la bibliothèque APR / native qui n'est pas disponible». J'ai même fait la commande "ant jar" et copié tomcat-native-1.1.33-dev.jar dans mon répertoire tomcat / lib.
coladict
Vous devez copier le fichier .so résultant dans ce répertoire, ou plus spécifiquement, dans java.library.path.
demonkoryu
9

Je viens de passer par ceci et l'ai configuré avec ce qui suit:

Ubuntu 16.04

Tomcat 8.5.9

Apache2.4.25

APR 1.5.2

Tomcat natif 1.2.10

Java 8

Voici les étapes que j'ai utilisées en fonction des anciens messages ici:

Installer le paquet

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

Vérifiez que ces packages sont installés

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

Installer le paquet

sudo apt-get install libssl-dev

Installer et compiler 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

vérifier l'installation

cd /usr/local/apr/lib/
ls 

vous devriez voir le fichier compilé comme

libapr-1.la

Téléchargez et installez le package source natif Tomcat

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

vérifier 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

Modifiez le fichier /opt/tomcat/bin/setenv.sh avec la ligne suivante:

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

redémarrer tomcat

sudo service tomcat restart

Russell Rottach
la source
J'ai cette erreur `relocation R_X86_64_32 contre.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

sur debian 8 je le corrige en installant libapr1-dev:

apt-get install libtcnative-1 libapr1-dev
Hasan Ramezani
la source
5

Eu ce problème aussi. Si vous n'avez les bibliothèques, mais toujours cette erreur, il peut être une erreur de configuration. Il se peut que vous manquiez la ligne suivante:server.xml

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

(Alternativement, il peut être commenté). Ceci <Listener>, comme les autres auditeurs, est un enfant du plus haut niveau <Server>.

Sans la <Listener>ligne, il n'y a aucune tentative de charger la bibliothèque APR, donc LD_LIBRARY_PATHet les -Djava.library.path=paramètres sont ignorés.

MSalters
la source
Vous, monsieur, êtes le meilleur. Après des heures à appliquer le front au clavier, il s'est avéré que APR / Native était correctement installé tout le temps. C'était un simple problème server.xml!
squish immortel le
3

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

Ensuite, ajoutez-le aux arguments tomcat de l'éclipse ( double-cliquez sur Server> Open Launch Configuration > onglet Arguments> VM arguments )

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

J'ai eu ce problème de mise à niveau de Java 8 à 11 . Après avoir ajouté cette dépendance, mon application s'est lancée sans problème:

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

J'ai eu le même problème quand Tomсat ne pouvait pas trouver la classe. Essayez d'afficher d'autres fichiers journaux. Parfois, aucune erreur de définition de classe trouvée apparaît dans différents fichiers journaux:

  • tomcat8-stdout
  • tomcat8-stderr
  • localhost
Koss
la source
0

Si vous ne disposez pas de la bibliothèque native Tomcat, installez-la avec:

sudo apt-get installer libtcnative-1

et s'il est toujours là, une ancienne version, mettez-le à niveau avec:

sudo apt-get mise à niveau libtcnative-1

Dejan
la source
0

Mon problème était d'ajouter une bibliothèque de tomcat au chemin de classe eclipse.Je vais simplement éclipser, cliquez à droite pour projeter et debug configuration -> classpath -> Add External JARsajouter tous les fichiers jars de apache-tomcat-7.0.35\bince problème était mon problème et cela a fonctionné pour moi.
entrez la description de l'image ici

Abd Abughazaleh
la source