“Không tìm thấy thư viện Apache Tomcat Native dựa trên APR” nghĩa là gì?


104

Tôi đang sử dụng Tomcat 7 trong Eclipse trên Windows. Khi khởi động Tomcat, tôi nhận được thông báo thông tin sau:

Thư viện Apache Tomcat Native dựa trên APR cho phép hiệu suất tối ưu trong môi trường sản xuất không được tìm thấy trên java.library.path

Điều này có nghĩa là gì và tôi có thể cung cấp thư viện APR như thế nào?

Câu trả lời:


119

Nó có nghĩa chính xác như những gì nó nói: "Thư viện Apache Tomcat Native dựa trên APR cho phép hiệu suất tối ưu trong môi trường sản xuất không được tìm thấy trên java.library.path"

Thư viện được đề cập đến được đóng gói trong một dll cụ thể của hệ điều hành (tcnative-1.dll) được tải qua JNI. Nó cho phép tomcat sử dụng các chức năng hệ điều hành không được cung cấp trong Java Runtime (chẳng hạn như sendfile, epoll, OpenSSL, trạng thái hệ thống, v.v.). Tomcat sẽ chạy tốt khi không có nó, nhưng đối với một số trường hợp sử dụng, nó sẽ nhanh hơn với các thư viện gốc.

Nếu bạn thực sự muốn, hãy tải xuống tcnative-1.dll(hoặc libtcnative.sodành cho Linux) và đặt nó vào thư mục bin, và thêm thuộc tính hệ thống vào cấu hình khởi chạy của máy chủ tomcat trong eclipse.

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

1
+1 Tôi chỉ gặp lỗi này (do OP đăng) trong Eclipse, mặc dù nó đã được sửa khi tôi chạy nó độc lập (tất nhiên, sau khi thêm lib gốc.) Cảm ơn bạn đã biết mẹo về cách đặt thuộc tính hệ thống!
asgs

7
Vẫn có cách nào để tắt tính năng này mà không thêm tệp .dll? @greyfairer
Koray Tugay

2
@greyfairer làm thế nào về IntelliJ IDEA trên Mac OS?
máy bay

1
Có libtcnative trong gói jboss-native cho macosx: jbossweb.jboss.org/downloads/jboss-native-2-0-10 , tôi đoán nó giống như vậy, được chuyển sang MacOS?
GreyFairer

1
Chúng tôi đã gặp sự cố với cài đặt tomcat-native trên MacOSX trên Tomcat 8.0.47. Chúng tôi đã tạo thành công các lib gốc bằng cách chỉ định các tùy chọn --prefix, --with-ssl và -with-apr. Vấn đề là các tệp nhị phân đã được sao chép vào thư mục "lib" của tomcat, chứ không phải vào thư mục "bin". Chỉ cần chuyển chúng vào "bin" và nó có thể hoạt động
maddob

31

Trừ khi bạn đang chạy một máy chủ sản xuất, đừng lo lắng về thông báo này. Đây là một thư viện được sử dụng để cải thiện hiệu suất (trên hệ thống sản xuất). Từ thư viện gốc dựa trên Apache Portable Runtime (APR) cho Tomcat :

Tomcat có thể sử dụng Apache Portable Runtime để cung cấp khả năng mở rộng, hiệu suất vượt trội và tích hợp tốt hơn với các công nghệ máy chủ gốc. Apache Portable Runtime là một thư viện có tính di động cao nằm ở trung tâm của Apache HTTP Server 2.x. APR có nhiều cách sử dụng, bao gồm quyền truy cập vào chức năng IO nâng cao (chẳng hạn như sendfile, epoll và OpenSSL), chức năng cấp hệ điều hành (tạo số ngẫu nhiên, trạng thái hệ thống, v.v.) và xử lý quy trình gốc (bộ nhớ chia sẻ, ống dẫn NT và ổ cắm Unix).


28

Trên RHEL Linux chỉ có vấn đề:

yum install tomcat-native.x86_64

/ Lưu ý: tùy theo kiến ​​trúc của bạn mà gói 64bit hay 32bit có thể có phần mở rộng khác nhau /

Đó là tất cả. Sau đó, bạn sẽ tìm thấy thông báo thông tin tiếp theo trong tệp nhật ký:

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

Tất cả các hoạt động sẽ nhanh hơn đáng kể so với trước đây.


2
Đối với CentOS 7 ít nhất, nó không được tìm thấy trong repo mặc định. Tuy nhiên, nó nằm trong EPEL, vì vậy sau khi thực hiện cài đặt epel-release, nó sẽ cài đặt.
Mike Gleason

2
Đối với CentOS 7, yum install tomcat-nativecố định này đối với tôi
Isaac Betesh

22

Cài đặt thư viện gốc trên máy chủ Ubuntu với:

sudo apt-get install libtcnative-1

Nếu điều đó không hiệu quả, cần cài đặt tomcat-native

  1. Cài đặt Oracle java7:

    • sudo add-apt-repository ppa: webupd8team / java
    • sudo apt-get cập nhật
    • sudo apt-get install oracle-java7-installer
    • sudo apt-get install oracle-java7-set-default
  2. Cài đặt tomcat apr:

  3. Cài đặt tomcat tomcat-native:


1
Tôi đã thử tất cả những thứ đó, nhưng không có gì hoạt động. Tôi tiếp tục nhận được 'Giao thức đã định cấu hình [org.apache.coyote.http11.Http11AprProtocol] yêu cầu APR / thư viện gốc không khả dụng'. Ngay cả lệnh "ant jar" và sao chép tomcat-native-1.1.33-dev.jar vào thư mục tomcat / lib của tôi.
coladict

Bạn cần sao chép tệp .so kết quả vào thư mục đó hoặc cụ thể hơn, sang java.library.path.
Devilkoryu

9

Tôi vừa xem qua và định cấu hình nó như sau:

Ubuntu 16.04

Tomcat 8,5,9

Apache2.4.25

APR 1.5.2

Tomcat-native 1.2.10

Java 8

Đây là các bước tôi đã sử dụng dựa trên các bài viết cũ hơn ở đây:

Cài đặt gói

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

Xác minh các gói này đã được cài đặt

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

Cài đặt gói

sudo apt-get install libssl-dev

Cài đặt và biên dịch 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

xác minh cài đặt

cd /usr/local/apr/lib/
ls 

bạn sẽ thấy tệp đã biên dịch là

libapr-1.la

Tải xuống và cài đặt gói nguồn 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

xác minh 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

Chỉnh sửa tệp /opt/tomcat/bin/setenv.sh với dòng sau:

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

khởi động lại tomcat

sudo service tomcat restart


Tôi đang gặp lỗi này `` tái định cư R_X86_64_32 chống lại.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

trên debian 8, tôi sửa nó bằng cách cài đặt libapr1-dev:

apt-get install libtcnative-1 libapr1-dev

5

Có vấn đề này là tốt. Nếu bạn làm có các thư viện, nhưng vẫn có lỗi này, nó có thể là một lỗi cấu hình. Của bạn server.xmlcó thể thiếu dòng sau:

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

(Ngoài ra, nó có thể được bình luận ra ngoài). Điều này <Listener>, giống như những thính giả khác là một đứa trẻ của cấp cao nhất <Server>.

Nếu không có <Listener>dòng, không có nỗ lực nào để tải thư viện APR, vì vậy LD_LIBRARY_PATH-Djava.library.path=cài đặt bị bỏ qua.


Bạn, thưa ông, là tốt nhất. Sau nhiều giờ áp dụng bàn phím, hóa ra tôi đã cài đặt APR / Native đúng cách suốt thời gian qua. Hai là một vấn đề server.xml đơn giản!
bất tử squish

3

Trên 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.

Sau đó, thêm nó vào các đối số tomcat của eclipse ( bấm đúp vào Máy chủ> Mở Cấu hình Khởi chạy > tab Đối số> Đối số VM )

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

1

Tôi đã gặp sự cố này khi nâng cấp từ Java 8 lên 11 . Sau khi thêm phần phụ thuộc này, ứng dụng của tôi đã khởi chạy mà không có vấn đề gì:

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

0

Tôi đã gặp vấn đề tương tự khi tomсat không thể tìm thấy lớp học. Cố gắng xem các tệp nhật ký khác. Đôi khi lỗi Không tìm thấy định dạng lớp nào xuất hiện trong các tệp nhật ký khác nhau:

  • tomcat8-stdout
  • tomcat8-stderr
  • localhost

0

Nếu bạn không có thư viện Tomcat Native, hãy cài đặt nó với:

sudo apt-get install libtcnative-1

và nếu phiên bản cũ vẫn còn, hãy nâng cấp nó với:

sudo apt-get nâng cấp libtcnative-1


0

Vấn đề của tôi là thêm một số thư viện từ tomcat vào đường dẫn lớp eclipse, tôi chỉ cần nhấp chuột phải vào eclipse để chiếu và debug configuration -> classpath -> Add External JARsthêm tất cả các tệp bình từ apache-tomcat-7.0.35\binđây là vấn đề của tôi và nó đã hoạt động đối với tôi.
nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.