¿Qué significa “No se encontró la biblioteca nativa Apache Tomcat basada en APR”?

104

Estoy usando Tomcat 7 en Eclipse en Windows. Al iniciar Tomcat, recibo el siguiente mensaje de información:

La biblioteca nativa Apache Tomcat basada en APR que permite un rendimiento óptimo en entornos de producción no se encontró en java.library.path

¿Qué significa esto y cómo puedo proporcionar la biblioteca APR?

fresh_dev
fuente

Respuestas:

119

Significa exactamente lo que dice: "La biblioteca nativa Apache Tomcat basada en APR que permite un rendimiento óptimo en entornos de producción no se encontró en java.library.path"

La biblioteca a la que se hace referencia se incluye en un dll específico del sistema operativo (tcnative-1.dll) cargado a través de JNI. Permite a tomcat utilizar funcionalidades del sistema operativo que no se proporcionan en Java Runtime (como sendfile, epoll, OpenSSL, estado del sistema, etc.). Tomcat funcionará bien sin él, pero para algunos casos de uso, será más rápido con las bibliotecas nativas.

Si realmente lo desea, descargue el tcnative-1.dll(o libtcnative.sopara Linux) y colóquelo en la carpeta bin, y agregue una propiedad del sistema a la configuración de inicio del servidor tomcat en eclipse.

 -Djava.library.path=c:\dev\tomcat\bin
GreyFairer
fuente
1
+1 Recibí este error (publicado por OP) solo en Eclipse, aunque se solucionó cuando lo ejecuté de forma independiente (por supuesto, después de agregar la biblioteca nativa). ¡Gracias por el consejo sobre cómo configurar la propiedad del sistema!
pregunta el
7
¿Hay alguna forma de deshabilitar la función sin agregar el archivo .dll? @greyfairer
Koray Tugay
2
@greyfairer ¿qué tal IntelliJ IDEA en Mac OS?
avión
1
Hay libtcnative en el paquete jboss-native para macosx: jbossweb.jboss.org/downloads/jboss-native-2-0-10 , supongo que es lo mismo, ¿portado a MacOS?
GreyFairer
1
Tuvimos un problema con la instalación nativa de tomcat en MacOSX en Tomcat 8.0.47. Construimos las librerías nativas con éxito especificando las opciones --prefix, --with-ssl y -with-apr. El problema fue que los binarios se copiaron en la carpeta "lib" de tomcat y no en la carpeta "bin". Basta con mover a "bin" y que podría funcionar
maddob
31

A menos que esté ejecutando un servidor de producción, no se preocupe por este mensaje. Esta es una biblioteca que se utiliza para mejorar el rendimiento (en sistemas de producción). Desde la biblioteca nativa basada en Apache Portable Runtime (APR) para Tomcat :

Tomcat puede utilizar Apache Portable Runtime para proporcionar escalabilidad, rendimiento y una mejor integración con tecnologías de servidor nativas. Apache Portable Runtime es una biblioteca altamente portátil que se encuentra en el corazón de Apache HTTP Server 2.x. APR tiene muchos usos, incluido el acceso a la funcionalidad IO avanzada (como sendfile, epoll y OpenSSL), la funcionalidad a nivel de SO (generación de números aleatorios, estado del sistema, etc.) y el manejo de procesos nativos (memoria compartida, tuberías NT y sockets Unix).

Matthew Farwell
fuente
28

En RHEL Linux, solo emita:

yum install tomcat-native.x86_64

/ Nota: dependiendo de su arquitectura, el paquete de 64 bits o 32 bits puede tener una extensión diferente /

Eso es todo. Después de eso, encontrará en el archivo de registro el siguiente mensaje informativo:

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

Todas las operaciones serán notablemente más rápidas que antes.

user911734
fuente
2
Para CentOS 7 al menos, no se encontró en los repositorios predeterminados. Sin embargo, estaba en EPEL, así que después de hacer yum install epel-release, se instala.
Mike Gleason
2
Para CentOS 7, yum install tomcat-nativearreglé esto para mí
Isaac Betesh
22

Instale la biblioteca nativa en el servidor Ubuntu con:

sudo apt-get install libtcnative-1

Si eso no funciona, es necesario instalar tomcat-native

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

  3. Instale tomcat tomcat-native:

Amadu Bah
fuente
1
Probé todos esos, pero nada funciona. Sigo recibiendo 'El protocolo configurado [org.apache.coyote.http11.Http11AprProtocol] requiere la biblioteca APR / nativa que no está disponible'. Incluso hice el comando "ant jar" y copié tomcat-native-1.1.33-dev.jar en mi directorio tomcat / lib.
Coladict
Debe copiar el archivo .so resultante en ese directorio, o más específicamente, en java.library.path.
demonkoryu
9

Pasé por esto y lo configuré con lo siguiente:

Ubuntu 16.04

Tomcat 8.5.9

Apache2.4.25

1.5.2 ABR

Nativo de Tomcat 1.2.10

Java 8

Estos son los pasos que utilicé según las publicaciones anteriores aquí:

Paquete de instalación

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

Verifique que estos paquetes estén instalados

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

Paquete de instalación

sudo apt-get install libssl-dev

Instalar y compilar 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

verificar la instalación

cd /usr/local/apr/lib/
ls 

debería ver el archivo compilado como

libapr-1.la

Descargue e instale el paquete fuente nativo de 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

verificar 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

Edite el archivo /opt/tomcat/bin/setenv.sh con la siguiente línea:

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

reiniciar Tomcat

sudo service tomcat restart

Russell Rottach
fuente
Tengo este error `reubicación R_X86_64_32 contra.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

en debian 8 lo soluciono instalando libapr1-dev:

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

Tuve este problema también. Si lo tienen las bibliotecas, pero todavía tienen este error, puede ser un error de configuración. Es server.xmlposible que le falte la siguiente línea:

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

(Alternativamente, se puede comentar). Este <Listener>, como otros oyentes, es hijo del nivel superior <Server>.

Sin la <Listener>línea, no hay ningún intento de cargar la librería APR, de modo LD_LIBRARY_PATHy -Djava.library.path=los ajustes son ignorados.

MSalters
fuente
Usted, señor, es el mejor. Después de horas de aplicar la frente al teclado, resulta que tenía APR / Native instalado correctamente todo el tiempo. ¡Fue un simple problema de server.xml!
squish inmortal
3

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

Luego agréguelo a los argumentos tomcat del eclipse ( haga doble clic en Servidor> Abrir configuración de lanzamiento > pestaña Argumentos> Argumentos de VM )

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

Tuve este problema al actualizar de Java 8 a 11 . Después de agregar esta dependencia, mi aplicación se inició sin problemas:

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

Tuve el mismo problema cuando tomсat no pudo encontrar la clase. Intente ver otros archivos de registro. A veces, el error No class def found aparece en diferentes archivos de registro:

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

Si no tiene la biblioteca nativa de Tomcat, instálela con:

sudo apt-get install libtcnative-1

y si todavía hay una versión anterior, actualícela con:

sudo apt-get upgrade libtcnative-1

Dejan
fuente
0

Mi problema fue agregar una biblioteca de tomcat a la ruta de clase de eclipse, solo voy a eclipse, haga clic en el derecho para proyectar y debug configuration -> classpath -> Add External JARsagregue todos los archivos jar de apache-tomcat-7.0.35\bineste fue mi problema y funcionó para mí.
ingrese la descripción de la imagen aquí

Abd Abughazaleh
fuente