“ ไม่พบ Apache Tomcat Native library ที่ใช้ APR” หมายความว่าอย่างไร


107

ฉันใช้ Tomcat 7 ใน Eclipse บน Windows เมื่อเริ่ม Tomcat ฉันได้รับข้อความข้อมูลต่อไปนี้:

ไม่พบไลบรารี Apache Tomcat Native ที่ใช้ APR ซึ่งอนุญาตให้มีประสิทธิภาพที่ดีที่สุดในสภาพแวดล้อมการใช้งานจริงบน java.library.path

สิ่งนี้หมายความว่าอย่างไรและฉันจะจัดหาไลบรารี APR ได้อย่างไร

คำตอบ:


119

มันหมายความตามที่กล่าวไว้อย่างแน่นอน: "ไม่พบไลบรารี Apache Tomcat Native ที่ใช้ APR ซึ่งให้ประสิทธิภาพที่ดีที่สุดในสภาพแวดล้อมการผลิตบน java.library.path"

ไลบรารีที่อ้างถึงนั้นรวมอยู่ใน dll เฉพาะของระบบปฏิบัติการ (tcnative-1.dll) ที่โหลดผ่าน JNI ช่วยให้ tomcat ใช้ฟังก์ชัน OS ที่ไม่ได้จัดเตรียมไว้ใน Java Runtime (เช่น sendfile, epoll, OpenSSL, สถานะระบบ ฯลฯ ) Tomcat จะทำงานได้ดีหากไม่มีมัน แต่สำหรับบางกรณีการใช้งานมันจะเร็วกว่าเมื่อใช้ไลบรารีดั้งเดิม

หากคุณต้องการจริงๆให้ดาวน์โหลดtcnative-1.dll(หรือlibtcnative.soสำหรับ Linux)และวางไว้ในโฟลเดอร์ bin และเพิ่มคุณสมบัติระบบในการกำหนดคอนฟิกการเรียกใช้เซิร์ฟเวอร์ tomcat ใน eclipse

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

1
+1 ฉันได้รับข้อผิดพลาดนี้ (โพสต์โดย OP) ภายใต้ Eclipse เท่านั้นแม้ว่าจะได้รับการแก้ไขเมื่อฉันเรียกใช้แบบสแตนด์อโลน (แน่นอนหลังจากเพิ่ม lib เนทีฟ) ขอบคุณสำหรับเคล็ดลับในการตั้งค่าคุณสมบัติระบบ!
asgs

7
มีการปิดใช้งานคุณลักษณะนี้โดยไม่ต้องเพิ่มไฟล์. dll หรือไม่? @greyfairer
Koray Tugay

2
@greyfairer แล้ว IntelliJ IDEA ภายใต้ Mac OS ล่ะ?
เครื่องบิน

1
มี libtcnative ในแพ็คเกจ jboss-native สำหรับ macosx: jbossweb.jboss.org/downloads/jboss-native-2-0-10ฉันเดาว่ามันเป็นสิ่งเดียวกันย้ายไปยัง MacOS?
GreyFairer

1
เรามีปัญหากับการติดตั้ง tomcat-native บน MacOSX บน Tomcat 8.0.47 เราสร้าง libs ดั้งเดิมได้สำเร็จโดยระบุตัวเลือก --prefix, --with-ssl และ -with-apr ปัญหาคือไบนารีถูกคัดลอกไปยังโฟลเดอร์ "lib" ของ tomcat ไม่ใช่โฟลเดอร์ "bin" เพียงแค่ย้ายไปที่ "bin" ก็อาจได้ผล
maddob

31

หากคุณไม่ได้ใช้เซิร์ฟเวอร์ที่ใช้งานจริงไม่ต้องกังวลกับข้อความนี้ นี่คือไลบรารีที่ใช้เพื่อปรับปรุงประสิทธิภาพ (ในระบบการผลิต) จากไลบรารี Native ที่ใช้ Apache Portable Runtime (APR) สำหรับ Tomcat :

Tomcat สามารถใช้ Apache Portable Runtime เพื่อเพิ่มความสามารถในการปรับขนาดประสิทธิภาพและการทำงานร่วมกับเทคโนโลยีเซิร์ฟเวอร์เนทีฟที่เหนือกว่า Apache Portable Runtime เป็นไลบรารีแบบพกพาที่เป็นหัวใจสำคัญของ Apache HTTP Server 2.x APR มีประโยชน์มากมายรวมถึงการเข้าถึงฟังก์ชัน IO ขั้นสูง (เช่น sendfile, epoll และ OpenSSL) ฟังก์ชันระดับ OS (การสร้างตัวเลขแบบสุ่มสถานะของระบบ ฯลฯ ) และการจัดการกระบวนการดั้งเดิม (หน่วยความจำที่ใช้ร่วมกันท่อ NT และซ็อกเก็ต Unix)


29

บน RHEL Linux เพียงแค่ปัญหา:

yum install tomcat-native.x86_64

/ หมายเหตุ: ขึ้นอยู่กับสถาปัตยกรรมของคุณแพ็คเกจ 64 บิตหรือ 32 บิตอาจมีส่วนขยายที่แตกต่างกัน /

นั้นคือทั้งหมด. หลังจากนั้นคุณจะพบข้อความให้ข้อมูลถัดไปในไฟล์บันทึก:

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

การดำเนินการทั้งหมดจะเร็วขึ้นกว่าเดิมอย่างเห็นได้ชัด


2
สำหรับ CentOS 7 อย่างน้อยไม่พบใน repos เริ่มต้น อย่างไรก็ตามมันอยู่ใน EPEL ดังนั้นหลังจากทำการติดตั้ง yum install epel-release แล้วจึงทำการติดตั้ง
Mike Gleason

2
สำหรับ CentOS 7 yum install tomcat-nativeแก้ไขให้ฉัน
Isaac Betesh

22

การติดตั้งไลบรารีเนทีฟบนเซิร์ฟเวอร์ Ubuntu ด้วย:

sudo apt-get install libtcnative-1

หากไม่ได้ผลต้องติดตั้ง tomcat-native

  1. ติดตั้ง Oracle java7:

    • sudo add-apt-repository ppa: webupd8team / java
    • อัปเดต sudo apt-get
    • sudo apt-get ติดตั้ง oracle-java7-installer
    • sudo apt-get ติดตั้ง oracle-java7-set-default
  2. ติดตั้ง tomcat apr:

    • wget http://apache.mirror.anlx.net//apr/apr-1.5.0.tar.gz
    • tar zxvf เมษายน -1.5.0.tar.gz
    • rm เมษายน -1.5.0.tar.gz
    • ซีดีเมษายน -1.5.0
    • sudo ./ กำหนดค่า
    • ทำ sudo
    • sudo ทำการติดตั้ง
    • ส่งออก LD_LIBRARY_PATH = '$ LD_LIBRARY_PATH: / usr / local / apr / lib'
  3. ติดตั้ง tomcat tomcat-native:


1
ฉันลองทั้งหมดแล้ว แต่ก็ไม่ได้ผล ฉันยังคงได้รับ 'โปรโตคอลที่กำหนดค่าไว้ [org.apache.coyote.http11.Http11AprProtocol] ต้องการ APR / ไลบรารีเนทีฟซึ่งไม่พร้อมใช้งาน' แม้แต่คำสั่ง "ant jar" และคัดลอก tomcat-native-1.1.33-dev.jar ไปยังไดเร็กทอรี tomcat / lib ของฉัน
coladict

คุณต้องคัดลอกไฟล์. so ที่เป็นผลลัพธ์ไปยังไดเร็กทอรีนั้นหรือโดยเฉพาะอย่างยิ่งไปที่ java.library.path
demonkoryu

10

ฉันเพิ่งผ่านสิ่งนี้และกำหนดค่าดังต่อไปนี้:

Ubuntu 16.04

Tomcat 8.5.9

Apache2.4.25

เมษายน 1.5.2

Tomcat พื้นเมือง 1.2.10

จาวา 8

นี่คือขั้นตอนที่ฉันใช้ตามโพสต์เก่าที่นี่:

ติดตั้งแพ็คเกจ

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

ตรวจสอบว่ามีการติดตั้งแพ็คเกจเหล่านี้แล้ว

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

ติดตั้งแพ็คเกจ

sudo apt-get install libssl-dev

ติดตั้งและคอมไพล์ 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

ตรวจสอบการติดตั้ง

cd /usr/local/apr/lib/
ls 

คุณควรเห็นไฟล์ที่คอมไพล์เป็น

libapr-1.la

ดาวน์โหลดและติดตั้งแพ็คเกจซอร์ส 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

ตรวจสอบ 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

แก้ไขไฟล์ /opt/tomcat/bin/setenv.sh ด้วยบรรทัดต่อไปนี้:

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

รีสตาร์ท tomcat

sudo service tomcat restart


ฉันมีข้อผิดพลาดนี้ `` การย้ายตำแหน่ง R_X86_64_32 เทียบกับ.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

มีปัญหานี้เช่นกัน หากคุณไม่ได้มีห้องสมุด แต่ยังคงมีข้อผิดพลาดนี้ก็อาจจะมีข้อผิดพลาดในการกำหนดค่า คุณserver.xmlอาจขาดบรรทัดต่อไปนี้:

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

(หรืออาจมีการแสดงความคิดเห็น) นี้<Listener>เช่นฟังอื่น ๆ <Server>ที่เป็นลูกของระดับบนสุดที่

หากไม่มี<Listener>บรรทัดจะไม่มีความพยายามในการโหลดไลบรารี APR ดังนั้นLD_LIBRARY_PATHและ-Djava.library.path=การตั้งค่าจะถูกละเว้น


คุณเป็นคนที่ดีที่สุด หลังจากใช้หน้าผากกับคีย์บอร์ดหลายชั่วโมงปรากฎว่าฉันติดตั้ง APR / Native อย่างถูกต้องตลอดเวลา Twas ปัญหา server.xml ง่ายๆ!
squish อมตะ

3

บน 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.

จากนั้นเพิ่มลงในอาร์กิวเมนต์ tomcat ของ eclipse ( ดับเบิลคลิกที่เซิร์ฟเวอร์> เปิดแท็บLaunch Launch Configuration > Arguments> อาร์กิวเมนต์VM )

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

1

ผมมีปัญหานี้ปรับรุ่นจาก Java 8-11 หลังจากเพิ่มการอ้างอิงนี้แอปของฉันก็เปิดตัวโดยไม่มีปัญหา:

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

0

ฉันมีปัญหาเดียวกันเมื่อtomсatไม่พบชั้นเรียน ลองดูไฟล์บันทึกอื่น ๆ บางครั้งข้อผิดพลาด No class def found จะปรากฏในไฟล์บันทึกต่างๆ:

  • tomcat8-stdout
  • แมวตัวผู้ 8-stderr
  • localhost

0

หากคุณไม่มีไลบรารี Tomcat Native ให้ติดตั้งด้วย:

sudo apt-get ติดตั้ง libtcnative-1

และหากยังคงมีเวอร์ชันเก่าให้อัปเกรดด้วย:

sudo apt-get อัพเกรด libtcnative-1


0

ปัญหาของฉันคือในการเพิ่มไลบรารีจาก tomcat ไปยัง eclipse class path ฉันแค่ไปที่ eclipse คลิกขวาเพื่อฉายและจะdebug configuration -> classpath -> Add External JARsเพิ่มไฟล์ jars ทั้งหมดจากapache-tomcat-7.0.35\binนี่เป็นปัญหาของฉันและมันก็ใช้ได้สำหรับฉัน
ป้อนคำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.