Co oznacza „Nie znaleziono natywnej biblioteki Apache Tomcat opartej na APR”?

104

Używam Tomcat 7 w Eclipse w systemie Windows. Podczas uruchamiania Tomcat otrzymuję następujący komunikat informacyjny:

Biblioteka natywna Apache Tomcat oparta na APR, która zapewnia optymalną wydajność w środowiskach produkcyjnych, nie została znaleziona w java.library.path

Co to oznacza i jak mogę udostępnić bibliotekę APR?

fresh_dev
źródło

Odpowiedzi:

119

Oznacza dokładnie to, co jest napisane: „Biblioteka natywna Apache Tomcat oparta na APR, która zapewnia optymalną wydajność w środowiskach produkcyjnych, nie została znaleziona w java.library.path”

Biblioteka, o której mowa, jest dołączona do biblioteki DLL specyficznej dla systemu operacyjnego (tcnative-1.dll) ładowanej za pośrednictwem JNI. Pozwala tomcatowi korzystać z funkcji systemu operacyjnego, które nie są dostępne w Java Runtime (takich jak sendfile, epoll, OpenSSL, status systemu itp.). Tomcat będzie działał bez niego, ale w niektórych przypadkach będzie działał szybciej z natywnymi bibliotekami.

Jeśli naprawdę chcesz, pobierz plik tcnative-1.dll(lub libtcnative.sodla systemu Linux) i umieść go w folderze bin, a następnie dodaj właściwość systemową do konfiguracji uruchamiania serwera tomcat w eclipse.

 -Djava.library.path=c:\dev\tomcat\bin
GreyFairer
źródło
1
+1 Otrzymywałem ten błąd (wysłany przez OP) tylko pod Eclipse, chociaż został naprawiony, kiedy uruchomiłem go samodzielnie (oczywiście po dodaniu natywnej biblioteki). Dzięki za wskazówkę dotyczącą ustawiania właściwości systemu!
asgs
7
Czy mimo to można wyłączyć tę funkcję bez dodawania pliku .dll? @greyfairer
Koray Tugay
2
@greyfairer a co z IntelliJ IDEA w systemie Mac OS?
samolot
1
W pakiecie jboss-native dla macosx jest libtcnative : jbossweb.jboss.org/downloads/jboss-native-2-0-10 , myślę, że to to samo, przeportowane na MacOS?
GreyFairer
1
Mieliśmy problem z natywną instalacją tomcat na MacOSX na Tomcat 8.0.47. Zbudowaliśmy natywne biblioteki pomyślnie, podając opcje --prefix, --with-ssl i -with-apr. Problem polegał na tym, że pliki binarne zostały skopiowane do folderu „lib” w tomcat, a nie do folderu „bin”. Po prostu przenieś je do „bin” i może to zadziałać
maddob
31

Jeśli nie masz serwera produkcyjnego, nie przejmuj się tą wiadomością. Jest to biblioteka służąca do poprawy wydajności (w systemach produkcyjnych). Z biblioteki natywnej opartej na Apache Portable Runtime (APR) dla Tomcat :

Tomcat może używać Apache Portable Runtime, aby zapewnić doskonałą skalowalność, wydajność i lepszą integrację z natywnymi technologiami serwerowymi. Apache Portable Runtime to wysoce przenośna biblioteka, która jest sercem Apache HTTP Server 2.x. APR ma wiele zastosowań, w tym dostęp do zaawansowanych funkcji we / wy (takich jak sendfile, epoll i OpenSSL), funkcjonalność na poziomie systemu operacyjnego (generowanie liczb losowych, stan systemu itp.) Oraz natywną obsługę procesów (pamięć współdzielona, ​​potoki NT i gniazda Unix).

Matthew Farwell
źródło
28

Na RHEL Linux wystarczy wydać:

yum install tomcat-native.x86_64

/ Uwaga: w zależności od Twojej architektury pakiet 64-bitowy lub 32-bitowy może mieć różne rozszerzenia /

To wszystko. Następnie w pliku dziennika znajdziesz następną wiadomość informacyjną:

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

Wszystkie operacje będą zauważalnie szybsze niż wcześniej.

user911734
źródło
2
Przynajmniej w przypadku CentOS 7 nie znaleziono go w domyślnych repozytoriach. Był w EPEL, więc po wykonaniu yum install epel-release, instaluje się.
Mike Gleason
2
W przypadku CentOS 7 yum install tomcat-nativenaprawiono to dla mnie
Isaac Betesh
22

Instalacja natywnej biblioteki na serwerze Ubuntu za pomocą:

sudo apt-get install libtcnative-1

Jeśli to nie zadziała, należy zainstalować tomcat-native

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

  3. Zainstaluj tomcat tomcat-native:

Amadu Bah
źródło
1
Próbowałem wszystkich, ale nic nie działa. Ciągle otrzymuję komunikat „Skonfigurowany protokół [org.apache.coyote.http11.Http11AprProtocol] wymaga biblioteki APR / natywnej, która nie jest dostępna”. Nawet wykonałem polecenie "ant jar" i skopiowałem tomcat-native-1.1.33-dev.jar do mojego katalogu tomcat / lib.
coladict,
Musisz skopiować wynikowy plik .so do tego katalogu, a dokładniej do java.library.path.
demonkoryu
9

Właśnie przez to przeszedłem i skonfigurowałem to z następującymi elementami:

Ubuntu 16.04

Tomcat 8.5.9

Apache2.4.25

KWI 1.5.2

Natywny dla Tomcat 1.2.10

Java 8

Oto kroki, których użyłem na podstawie starszych postów tutaj:

Zainstaluj pakiet

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

Sprawdź, czy te pakiety są zainstalowane

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

Zainstaluj pakiet

sudo apt-get install libssl-dev

Zainstaluj i skompiluj 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

sprawdź instalację

cd /usr/local/apr/lib/
ls 

powinieneś zobaczyć skompilowany plik jako

libapr-1.la

Pobierz i zainstaluj pakiet źródłowy 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

zweryfikuj 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

Edytuj plik /opt/tomcat/bin/setenv.sh z następującym wierszem:

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

uruchom ponownie tomcat

sudo service tomcat restart

Russell Rottach
źródło
Mam ten błąd `` relokacja R_X86_64_32 przeciwko.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

na Debianie 8 naprawiam to poprzez instalację libapr1-dev:

apt-get install libtcnative-1 libapr1-dev
Hasan Ramezani
źródło
5

Miałem też ten problem. Jeśli zrobić mają biblioteki, ale nadal mają ten błąd, może to być błąd konfiguracji. W Twoim server.xmlmoże brakować następującego wiersza:

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

(Alternatywnie można to skomentować). To <Listener>, podobnie jak inni słuchacze, jest dzieckiem z najwyższego poziomu <Server>.

Bez tej <Listener>linii nie ma próby załadowania biblioteki APR, więc ustawienia LD_LIBRARY_PATHi -Djava.library.path=są ignorowane.

MSalters
źródło
Pan jest najlepszy. Po kilku godzinach przyłożenia czoła do klawiatury okazuje się, że przez cały czas miałem poprawnie zainstalowany APR / Native. To był prosty problem z server.xml!
immortal squish
3

W systemie 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.

Następnie dodaj go do argumentów tomcat eclipse ( kliknij dwukrotnie Serwer> Otwórz konfigurację uruchamiania > karta Argumenty> argumenty maszyny wirtualnej )

-Djava.library.path=/usr/local/opt/tomcat-native/lib
Ryan Wibawa
źródło
1

Miałem problem z aktualizacją Java 8 do 11 . Po dodaniu tej zależności moja aplikacja uruchomiła się bez problemu:

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.25.0-GA</version>
</dependency>
Stephen Paul
źródło
0

Miałem ten sam problem, gdy tomсat nie mógł znaleźć klasy. Spróbuj wyświetlić inne pliki dziennika. Czasami w różnych plikach dziennika pojawia się błąd „Brak definicji klasy”:

  • tomcat8-stdout
  • tomcat8-stderr
  • Lokalny Gospodarz
Koss
źródło
0

Jeśli nie masz biblioteki Tomcat Native, zainstaluj ją za pomocą:

sudo apt-get install libtcnative-1

a jeśli nadal jest stara wersja, zaktualizuj ją za pomocą:

sudo apt-get upgrade libtcnative-1

Dejan
źródło
0

Mój problem polegał na dodaniu biblioteki z tomcat do ścieżki klasy zaćmienia, po prostu zamierzam kliknąć zaćmienie prawym przyciskiem myszy i debug configuration -> classpath -> Add External JARsdodać wszystkie pliki jars z apache-tomcat-7.0.35\bintego.
wprowadź opis obrazu tutaj

Abd Abughazaleh
źródło