Apa yang dimaksud dengan “Library Apache Tomcat Native berbasis APR tidak ditemukan”?

104

Saya menggunakan Tomcat 7 di Eclipse pada Windows. Saat memulai Tomcat, saya mendapatkan pesan info berikut:

Library Apache Tomcat Native berbasis APR yang memungkinkan kinerja optimal dalam lingkungan produksi tidak ditemukan di java.library.path

Apa artinya ini dan bagaimana saya bisa menyediakan perpustakaan APR?

fresh_dev
sumber

Jawaban:

119

Artinya persis seperti yang dikatakan: "Pustaka Native Apache Tomcat berbasis APR yang memungkinkan kinerja optimal dalam lingkungan produksi tidak ditemukan di java.library.path"

Pustaka yang dirujuk digabungkan ke dalam dll khusus OS (tcnative-1.dll) yang dimuat melalui JNI. Ini memungkinkan tomcat untuk menggunakan fungsionalitas OS yang tidak tersedia di Java Runtime (seperti sendfile, epoll, OpenSSL, status sistem, dll.). Tomcat akan berjalan dengan baik tanpanya, tetapi untuk beberapa kasus penggunaan, ini akan lebih cepat dengan perpustakaan asli.

Jika Anda benar-benar menginginkannya, unduh tcnative-1.dll(atau libtcnative.sountuk Linux) dan taruh di folder bin, dan tambahkan properti sistem ke konfigurasi peluncuran server tomcat di eclipse.

 -Djava.library.path=c:\dev\tomcat\bin
GreyFairer
sumber
1
+1 Saya mendapatkan kesalahan ini (diposting oleh OP) hanya di bawah Eclipse, meskipun sudah diperbaiki ketika saya menjalankannya secara mandiri (tentu saja, setelah menambahkan lib asli.) Terima kasih atas tip tentang pengaturan properti sistem!
asgs
7
Apakah ada cara untuk menonaktifkan fitur tanpa menambahkan file .dll? @greyfairer
Koray Tugay
2
@greyfairer bagaimana dengan IntelliJ IDEA di bawah Mac OS?
pesawat
1
Ada libtcnative dalam paket jboss-native untuk macosx: jbossweb.jboss.org/downloads/jboss-native-2-0-10 , saya kira itu hal yang sama, porting ke MacOS?
GreyFairer
1
Kami mengalami masalah dengan penginstalan asli kucing jantan di MacOSX di Tomcat 8.0.47. Kami berhasil membangun lib asli dengan menentukan opsi --prefix, --with-ssl dan -with-apr. Masalahnya adalah bahwa binari disalin ke folder "lib" dari tomcat, dan bukan ke folder "bin". Pindahkan saja ke "bin" dan ini mungkin berhasil
maddob
31

Kecuali Anda menjalankan server produksi, jangan khawatir tentang pesan ini. Ini adalah pustaka yang digunakan untuk meningkatkan kinerja (pada sistem produksi). Dari pustaka Asli berbasis Apache Portable Runtime (APR) untuk Tomcat :

Tomcat dapat menggunakan Apache Portable Runtime untuk memberikan skalabilitas, kinerja, dan integrasi yang lebih baik dengan teknologi server asli. Apache Portable Runtime adalah pustaka yang sangat portabel yang merupakan jantung dari Apache HTTP Server 2.x. APR memiliki banyak kegunaan, termasuk akses ke fungsionalitas IO lanjutan (seperti sendfile, epoll dan OpenSSL), fungsionalitas tingkat OS (pembuatan nomor acak, status sistem, dll), dan penanganan proses asli (memori bersama, pipa NT, dan soket Unix).

Matthew Farwell
sumber
28

Di RHEL Linux, cukup terbitkan:

yum install tomcat-native.x86_64

/ Catatan: tergantung pada arsitektur Anda, paket 64bit atau 32bit mungkin memiliki ekstensi yang berbeda /

Itu semuanya. Setelah itu Anda akan menemukan di file log pesan informasi berikutnya:

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

Semua operasi akan terasa lebih cepat dari sebelumnya.

pengguna911734
sumber
2
Setidaknya untuk CentOS 7, itu tidak ditemukan di repo default. Itu di EPEL, bagaimanapun, jadi setelah melakukan yum install epel-release, itu menginstal.
Mike Gleason
2
Untuk CentOS 7, yum install tomcat-nativeperbaiki ini untuk saya
Isaac Betesh
22

Instalasi perpustakaan asli di server Ubuntu dengan:

sudo apt-get install libtcnative-1

Jika itu tidak berhasil, tomcat-native perlu diinstal

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

  3. Instal tomcat tomcat-native:

Amadu Bah
sumber
1
Saya mencoba semua itu, tetapi tidak ada yang berhasil. Saya terus mendapatkan 'Protokol yang dikonfigurasi [org.apache.coyote.http11.Http11AprProtocol] memerlukan APR / perpustakaan asli yang tidak tersedia'. Bahkan melakukan perintah "ant jar" dan menyalin tomcat-native-1.1.33-dev.jar ke direktori tomcat / lib saya.
coladict
Anda perlu menyalin file .so yang dihasilkan ke direktori itu, atau lebih khusus lagi, ke java.library.path.
demonkoryu
9

Saya baru saja melakukan ini dan mengonfigurasinya dengan yang berikut:

Ubuntu 16.04

Tomcat 8.5.9

Apache2.4.25

APR 1.5.2

Tomcat-native 1.2.10

Jawa 8

Ini adalah langkah-langkah yang saya gunakan berdasarkan posting lama di sini:

Instal paket

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

Pastikan paket-paket ini diinstal

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

Instal paket

sudo apt-get install libssl-dev

Instal dan kompilasi 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

verifikasi instalasi

cd /usr/local/apr/lib/
ls 

Anda akan melihat file yang dikompilasi sebagai

libapr-1.la

Unduh dan instal paket sumber Asli 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

verifikasi 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

Edit file /opt/tomcat/bin/setenv.sh dengan baris berikut:

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

restart tomcat

sudo service tomcat restart

Russell Rottach
sumber
Saya mengalami kesalahan ini `` relokasi R_X86_64_32 melawan.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

di debian 8 saya memperbaikinya dengan menginstal libapr1-dev:

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

Punya masalah ini juga. Jika Anda melakukan memiliki perpustakaan, tetapi masih memiliki kesalahan ini, mungkin kesalahan konfigurasi. Anda server.xmlmungkin kehilangan baris berikut:

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

(Atau, dapat dikomentari). Ini <Listener>, seperti pendengar lainnya, adalah anak dari tingkat atas <Server>.

Tanpa <Listener>line, tidak ada upaya untuk memuat perpustakaan April, sehingga LD_LIBRARY_PATHdan -Djava.library.path=pengaturan diabaikan.

MSalters
sumber
Anda, Tuan, adalah yang terbaik. Setelah berjam-jam mengaplikasikan dahi ke keyboard, ternyata APR / Native saya sudah terpasang dengan benar sepanjang waktu. Sungguh masalah server.xml sederhana!
squish abadi
3

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

Kemudian tambahkan ke argumen kucing jantan gerhana ( klik dua kali Server> Buka Konfigurasi Peluncuran > tab Argumen> Argumen VM )

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

Saya mengalami masalah ini saat meningkatkan dari Java 8 ke 11 . Setelah menambahkan ketergantungan ini, aplikasi saya diluncurkan tanpa masalah:

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

Saya memiliki masalah yang sama ketika Tom tidak dapat menemukan kelasnya. Coba lihat file log lainnya. Terkadang Tidak ada kesalahan kelas def ditemukan muncul di file log yang berbeda:

  • tomcat8-stdout.dll
  • tomcat8-stderr.dll
  • localhost
Koss
sumber
0

Jika Anda tidak memiliki pustaka Native Tomcat, instal dengan:

sudo apt-get install libtcnative-1

dan jika masih ada versi lama upgrade dengan:

sudo apt-get upgrade libtcnative-1

Dejan
sumber
0

Masalah saya adalah menambahkan beberapa perpustakaan dari tomcat ke jalur kelas gerhana saya hanya akan klik gerhana kanan untuk memproyeksikan dan akan debug configuration -> classpath -> Add External JARsmenambahkan semua file guci dari apache-tomcat-7.0.35\binini adalah masalah saya dan itu berhasil untuk saya.
masukkan deskripsi gambar di sini

Abd Abughazaleh
sumber