Что означает сообщение «Не найдена собственная библиотека Apache Tomcat на основе APR»?

105

Я использую Tomcat 7 в Eclipse в Windows. При запуске Tomcat я получаю следующее информационное сообщение:

Библиотека Apache Tomcat Native на основе APR, которая обеспечивает оптимальную производительность в производственных средах, не была найдена в java.library.path

Что это означает и как я могу предоставить библиотеку APR?

fresh_dev
источник

Ответы:

119

Это означает именно то, что он говорит: «Библиотека Apache Tomcat Native на основе APR, которая обеспечивает оптимальную производительность в производственных средах, не была найдена в java.library.path»

Упомянутая библиотека включена в специальную dll ОС (tcnative-1.dll), загружаемую через JNI. Это позволяет tomcat использовать функции ОС, не предоставленные в Java Runtime (такие как sendfile, epoll, OpenSSL, состояние системы и т. Д.). Tomcat без него будет работать нормально, но в некоторых случаях он будет быстрее с собственными библиотеками.

Если вы действительно этого хотите, загрузите tcnative-1.dll(или libtcnative.soдля Linux) и поместите его в папку bin и добавьте системное свойство в конфигурацию запуска сервера tomcat в eclipse.

 -Djava.library.path=c:\dev\tomcat\bin
GreyFairer
источник
1
+1 Я получал эту ошибку (опубликованную OP) только в Eclipse, хотя она была исправлена, когда я запускал ее в автономном режиме (конечно, после добавления собственной библиотеки). Спасибо за совет по настройке системного свойства!
asgs
7
Есть ли способ отключить эту функцию без добавления файла .dll? @greyfairer
Корай Тугай
2
@greyfairer как насчет IntelliJ IDEA под Mac OS?
Самолет
1
В пакете jboss-native для macosx есть libtcnative: jbossweb.jboss.org/downloads/jboss-native-2-0-10 , я думаю, это то же самое, перенесенное на MacOS?
GreyFairer
1
У нас возникла проблема с собственной установкой tomcat на MacOSX на Tomcat 8.0.47. Мы успешно создали собственные библиотеки, указав параметры --prefix, --with-ssl и -with-apr. Проблема заключалась в том, что двоичные файлы были скопированы в папку «lib» Tomcat, а не в папку «bin». Просто переместите их в «корзину», и это может сработать
maddob
31

Если вы не используете рабочий сервер, не беспокойтесь об этом сообщении. Это библиотека, которая используется для повышения производительности (в производственных системах). Из собственной библиотеки Apache Portable Runtime (APR) для Tomcat :

Tomcat может использовать Apache Portable Runtime для обеспечения превосходной масштабируемости, производительности и лучшей интеграции с собственными серверными технологиями. Apache Portable Runtime - это очень портативная библиотека, которая лежит в основе Apache HTTP Server 2.x. APR имеет множество применений, включая доступ к расширенным функциям ввода-вывода (таким как sendfile, epoll и OpenSSL), функциональность уровня ОС (генерация случайных чисел, состояние системы и т. Д.) И собственная обработка процессов (общая память, каналы NT и сокеты Unix).

Мэтью Фарвелл
источник
28

В RHEL Linux просто выполните:

yum install tomcat-native.x86_64

/ Примечание: в зависимости от вашей архитектуры 64-битный или 32-битный пакет может иметь другое расширение /

Вот и все. После этого в лог-файле появится следующее информационное сообщение:

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

Все операции будут заметно быстрее, чем раньше.

user911734
источник
2
По крайней мере, для CentOS 7 его не было в репозиториях по умолчанию. Однако он был в EPEL, поэтому после выполнения yum install epel-release он устанавливается.
Майк Глисон
2
Для CentOS 7 yum install tomcat-nativeэто исправлено для меня
Исаак Бетеш
22

Установка собственной библиотеки на сервер Ubuntu с помощью:

sudo apt-get install libtcnative-1

Если это не работает, необходимо установить tomcat-native

  1. Установите Oracle java7:

    • sudo add-apt-репозиторий ppa: webupd8team / java
    • sudo apt-get update
    • sudo apt-get установить oracle-java7-installer
    • sudo apt-get install oracle-java7-set-default
  2. Установите tomcat apr:

  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 04
10

Я просто прошел через это и настроил следующее:

Ubuntu 16.04

Tomcat 8.5.9

Apache2.4.25

1.5.2 год.

Tomcat-native 1.2.10

Java 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'

перезапустить кота

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
6

на debian 8 исправляю установкой libapr1-dev:

apt-get install libtcnative-1 libapr1-dev
Хасан Рамезани
источник
5

Была и эта проблема. Если вы делаете есть библиотеки, но до сих пор эта ошибка, это может быть ошибка конфигурации. Вы server.xmlможете пропускать следующую строку:

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

(Как вариант, его можно закомментировать). Это <Listener>, как и другие слушатели, детище верхнего уровня <Server>.

Без <Listener>линии, нет никакой попытки загрузить библиотеку APR, так LD_LIBRARY_PATHи -Djava.library.path=настройки игнорируются.

MSalters
источник
Вы, сэр, лучшие. После нескольких часов прикладывания лба к клавиатуре выясняется, что APR / Native все время был установлен правильно. Это была простая проблема с server.xml!
бессмертный сквиш
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 затмения ( дважды щелкните Сервер> Открыть конфигурацию запуска > вкладка Аргументы> Аргументы виртуальной машины )

-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
  • tomcat8-stderr
  • localhost
Косс
источник
0

Если у вас нет собственной библиотеки Tomcat, установите ее с помощью:

sudo apt-get установить libtcnative-1

и если там все еще есть старая версия, обновите ее:

sudo apt-get обновить libtcnative-1

Деян
источник
0

Моя проблема заключалась в том, чтобы добавить некоторую библиотеку из tomcat в путь к классу eclipse, я просто собираюсь щелкнуть правой кнопкой мыши для проекта и debug configuration -> classpath -> Add External JARsдобавить все файлы jar из apache-tomcat-7.0.35\binэтого была моя проблема, и она сработала для меня.
введите описание изображения здесь

Абд Абугхазале
источник