Что означает "Не найдена нативная библиотека Apache Tomcat на основе APR"?
Я использую Tomcat 7 в Eclipse на Windows. При запуске Tomcat я получаю следующее информационное сообщение:
Основанная на APR библиотека Apache Tomcat Native, обеспечивающая оптимальную производительность в производственных средах, не найдена в файле java.library.path
Что это значит и как я могу предоставить библиотеку APR?
13 ответов
Это означает именно то, что написано: "На java.library.path не было найдено библиотеки Apache Tomcat Native, основанной на APR, которая обеспечивает оптимальную производительность в производственных средах".
Упомянутая библиотека входит в специфическую для ОС dll (tcnative-1.dll), загружаемую через JNI. Это позволяет tomcat использовать функциональные возможности ОС, не предусмотренные в среде выполнения Java (такие как sendfile, epoll, OpenSSL, состояние системы и т. Д.). Tomcat прекрасно работает без него, но в некоторых случаях он будет быстрее с нативными библиотеками.
Если вы действительно этого хотите, загрузите tcnative-1.dll
(или же libtcnative.so
для Linux) и поместите его в папку bin и добавьте системное свойство в конфигурацию запуска сервера tomcat в eclipse.
-Djava.library.path=c:\dev\tomcat\bin
Если вы не используете рабочий сервер, не беспокойтесь об этом сообщении. Это библиотека, которая используется для повышения производительности (в производственных системах). Из собственной библиотеки Apache Portable Runtime (APR) для Tomcat:
Tomcat может использовать Apache Portable Runtime для обеспечения превосходной масштабируемости, производительности и лучшей интеграции с нативными серверными технологиями. Apache Portable Runtime - это очень переносимая библиотека, которая лежит в основе Apache HTTP Server 2.x. APR имеет множество применений, включая доступ к расширенным функциональным возможностям ввода-вывода (таким как sendfile, epoll и OpenSSL), функциональность на уровне ОС (генерация случайных чисел, состояние системы и т. Д.) И обработка собственных процессов (совместно используемая память, каналы NT и сокеты Unix).
На RHEL Linux просто выдайте:
ням установить tomcat-native.x86_64
/ Примечание: в зависимости от вашей архитектуры 64-битный или 32-битный пакет может иметь различное расширение /
Это все. После этого Вы найдете в файле журнала следующее информационное сообщение:
ИНФОРМАЦИЯ: Возможности APR: IPv6 [true], sendfile [true], принимать фильтры [false], случайные [true].
Все операции будут заметно быстрее, чем раньше.
Установка нативной библиотеки на сервер Ubuntu с помощью:
sudo apt-get install libtcnative-1
Если это не работает, нужно установить tomcat-native
Установите Oracle java7:
- sudo add-apt-repository ppa: webupd8team / java
- sudo apt-get update
- sudo apt-get установить oracle-java7-installer
- sudo apt-get установить oracle-java7-set-default
Установите Tomcat апреля:
- wget http://apache.mirror.anlx.net//apr/apr-1.5.0.tar.gz
- tar zxvf apr-1.5.0.tar.gz
- rm apr-1.5.0.tar.gz
- кд апрель-1.5.0
- sudo./configure
- судо сделать
- sudo make install
- export LD_LIBRARY_PATH = '$ LD_LIBRARY_PATH: / usr / local / apr / lib'
Установите tomcat-tomcat-native:
- wget http://mirrors.ukfast.co.uk/sites/ftp.apache.org//tomcat/tomcat-connectors/native/1.1.29/source/tomcat-native-1.1.29-src.tar.gz
- tar zxvf tomcat-native-1.1.29-src.tar.gz
- rm tomcat-native-1.1.29-src.tar.gz
- cd tomcat-native-1.1.29-src / jni / native
- JAVA_HOME = / USR / Библиотека / JVM / Java-7-оракула
- sudo ./configure --with-apr=/usr/local/apr --with-java-home=$JAVA_HOME
- судо сделать
- sudo make install
Я просто прошел через это и настроил его следующим образом:
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 установить libtcnative-1
Убедитесь, что эти пакеты установлены
sudo apt-get install make
sudo apt-get установить gcc
sudo apt-get установить openssl
Установить пакет
sudo apt-get установить 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
кд апрель-1.5.2
sudo./configure
судо сделать
sudo make install
проверить установку
cd / usr / local / apr / lib /
Ls
вы должны увидеть скомпилированный файл как
libapr-1.la
Загрузите и установите исходный пакет Tomcat Native
cd / opt / tomcat / bin
sudo tar -xzvf tomcat-native-1.2.10-src.tar.gz
cd tomcat-native-1.2.10-src / native
проверить JAVA_HOME
sudo pico ~ /.bashrc
экспорт JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
источник ~ /.bashrc
sudo./configure --with-apr = / usr / local / apr --with-java-home = $ JAVA_HOME
судо сделать
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
В 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
На дебиане 8 исправляю с установкой libapr1-dev
:
apt-get install libtcnative-1 libapr1-dev
Была и эта проблема. Если у вас есть библиотеки, но все еще есть эта ошибка, это может быть ошибка конфигурации. Ваш server.xml
может отсутствовать следующая строка:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
(В качестве альтернативы это может быть закомментировано). это <Listener>
как и другие слушатели - дитя высшего уровня <Server>
,
Без <Listener>
линия, нет попытки загрузить библиотеку APR, поэтому LD_LIBRARY_PATH
а также -Djava.library.path=
настройки игнорируются.
У меня возникла эта проблема при обновлении с Java 8 до 11. После добавления этой зависимости мое приложение запустилось без проблем:
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>
Для будущих читателей: я сам столкнулся с этой проблемой при попытке запустить приложение Spring Boot в Spring STS . Изначально эта проблема не всплыла. Некоторое время я работал над своим проектом без каких-либо проблем, пока в один прекрасный день я не начал получать именно эту ошибку.
Насколько я могу припомнить, я не вносил никаких изменений в конфигурацию своего проекта и не менял используемую версию Java / Tomcat.
Ни одно из обсуждений / предложений относительно установки собственной библиотеки tomcat не имело для меня никакого смысла, поскольку проект уже работал нормально и раньше.
РЕШЕНИЕ, которое сработало для меня:
Итак, наконец, я решил попытаться удалить и повторно импортировать свой проект.
Я удалил свой проект из Spring STS, перезапустил Spring STS, а затем повторно импортировал проект. Это работало как шарм, и с тех пор никогда не возникало проблем.
Вы также можете попробовать удалить любые файлы / папки, созданные IDE (если они есть) в вашем проекте, перед перезапуском IDE и повторным импортом проекта.
Я до сих пор время от времени работаю над этим проектом и на данный момент не сталкивался с этой проблемой. Моя текущая среда разработки - IntelliJ.
Я не уверен, была ли ошибка конкретной IDE.
Моя проблема заключалась в том, чтобы добавить некоторую библиотеку из tomcat в путь класса eclipse, я просто собираюсь затмить, щелкнуть правой кнопкой мыши для проекта и перейти к debug configuration -> classpath -> Add External JARs
добавить все файлы jars из apache-tomcat-7.0.35\bin
это была моя проблема, и у меня это сработало.
Если у вас нет библиотеки Tomcat Native, установите ее с помощью:
sudo apt-get установить libtcnative-1
и если она все еще там, обновите ее до:
sudo apt-get upgrade libtcnative-1
У меня была такая же проблема, когда Tomcat не мог найти класс. Попробуйте просмотреть другие файлы журнала. Иногда в разных файлах журнала появляется сообщение об отсутствии определения класса:
- tomcat8-STDOUT
- tomcat8-STDERR
- локальный