O que significa “A biblioteca nativa Apache Tomcat baseada em APR não foi encontrada”?

104

Estou usando o Tomcat 7 no Eclipse no Windows. Ao iniciar o Tomcat, estou recebendo a seguinte mensagem informativa:

A biblioteca nativa Apache Tomcat baseada em APR, que permite desempenho ideal em ambientes de produção, não foi encontrada em java.library.path

O que isso significa e como posso fornecer a biblioteca APR?

fresh_dev
fonte

Respostas:

119

Significa exatamente o que diz: "A biblioteca Apache Tomcat Native baseada em APR, que permite desempenho ideal em ambientes de produção, não foi encontrada no java.library.path"

A biblioteca referida está agrupada em uma dll específica do sistema operacional (tcnative-1.dll) carregada via JNI. Ele permite que o tomcat use funcionalidades do SO não fornecidas no Java Runtime (como sendfile, epoll, OpenSSL, status do sistema, etc.). O Tomcat funcionará perfeitamente sem ele, mas para alguns casos de uso, será mais rápido com as bibliotecas nativas.

Se você realmente quiser, baixe o tcnative-1.dll(ou libtcnative.sopara Linux) e coloque-o na pasta bin, e adicione uma propriedade do sistema à configuração de inicialização do servidor tomcat no eclipse.

 -Djava.library.path=c:\dev\tomcat\bin
GreyFairer
fonte
1
+1 Eu estava recebendo este erro (postado por OP) apenas no Eclipse, embora tenha sido corrigido quando o executei autônomo (é claro, depois de adicionar a lib nativa.) Obrigado pela dica sobre como definir a propriedade do sistema!
asgs de
7
Existe alguma maneira de desativar o recurso sem adicionar o arquivo .dll? @greyfairer
Koray Tugay
2
@greyfairer e quanto ao IntelliJ IDEA no Mac OS?
aeronave de
1
Há libtcnative no pacote jboss-native para macosx: jbossweb.jboss.org/downloads/jboss-native-2-0-10 , acho que é a mesma coisa, portado para MacOS?
GreyFairer
1
Tivemos um problema com a instalação nativa do tomcat no MacOSX no Tomcat 8.0.47. Construímos as libs nativas com sucesso especificando as opções --prefix, --with-ssl e -with-apr. O problema é que os binários foram copiados para a pasta "lib" do tomcat, e não para a pasta "bin". Basta movê-los para "bin" e pode funcionar
maddob
31

A menos que você esteja executando um servidor de produção, não se preocupe com esta mensagem. Esta é uma biblioteca usada para melhorar o desempenho (em sistemas de produção). Da biblioteca nativa baseada em Apache Portable Runtime (APR) para Tomcat :

O Tomcat pode usar o Apache Portable Runtime para fornecer escalabilidade, desempenho e melhor integração com tecnologias de servidor nativas. O Apache Portable Runtime é uma biblioteca altamente portátil que está no coração do Apache HTTP Server 2.x. APR tem muitos usos, incluindo acesso a funcionalidade IO avançada (como sendfile, epoll e OpenSSL), funcionalidade de nível de sistema operacional (geração de número aleatório, status do sistema, etc) e tratamento de processo nativo (memória compartilhada, canais NT e soquetes Unix).

Matthew Farwell
fonte
28

No RHEL Linux, basta emitir:

yum install tomcat-native.x86_64

/ Nota: dependendo da sua arquitetura, o pacote de 64 bits ou 32 bits pode ter extensão diferente /

Isso é tudo. Depois disso, você encontrará no arquivo de log a próxima mensagem informativa:

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

Todas as operações serão visivelmente mais rápidas do que antes.

user911734
fonte
2
Pelo menos para o CentOS 7, ele não foi encontrado nos repositórios padrão. Estava na EPEL, entretanto, depois de fazer yum install epel-release, ele instala.
Mike Gleason
2
Para CentOS 7, yum install tomcat-nativeconsertou isso para mim
Isaac Betesh
22

Instalação da biblioteca nativa no servidor Ubuntu com:

sudo apt-get install libtcnative-1

Se isso não funcionar, o nativo do tomcat precisa ser instalado

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

  3. Instale o tomcat tomcat nativo:

Amadu Bah
fonte
1
Eu tentei todos eles, mas nada funciona. Eu continuo recebendo 'O protocolo configurado [org.apache.coyote.http11.Http11AprProtocol] requer o APR / biblioteca nativa que não está disponível'. Até fiz o comando "ant jar" e copiei tomcat-native-1.1.33-dev.jar para meu diretório tomcat / lib.
coladito de
Você precisa copiar o arquivo .so resultante para esse diretório ou, mais especificamente, para java.library.path.
demonkoryu
9

Acabei de passar por isso e configurá-lo com o seguinte:

Ubuntu 16.04

Tomcat 8.5.9

Apache2.4.25

ABR 1.5.2

Tomcat-nativo 1.2.10

Java 8

Estas são as etapas que usei com base nas postagens mais antigas aqui:

Pacote de instalação

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

Verifique se esses pacotes estão instalados

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

Pacote de instalação

sudo apt-get install libssl-dev

Instale e compile o APR do Apache

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

verificar a instalação

cd /usr/local/apr/lib/
ls 

você deve ver o arquivo compilado como

libapr-1.la

Baixe e instale o pacote de origem 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

verificar 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

Edite o arquivo /opt/tomcat/bin/setenv.sh com a seguinte linha:

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

reinicie o tomcat

sudo service tomcat restart

Russell Rottach
fonte
Estou tendo este erro `relocação R_X86_64_32 contra.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

no debian 8 eu conserto com a instalação de libapr1-dev:

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

Tive esse problema também. Se você fazer tem as bibliotecas, mas ainda tem este erro, pode ser um erro de configuração. Sua server.xmlpode estar faltando a seguinte linha:

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

(Alternativamente, pode ser comentado). Este <Listener>, como outros ouvintes, é filho do nível superior <Server>.

Sem a <Listener>linha, não há nenhuma tentativa de carregar a biblioteca APR, de modo LD_LIBRARY_PATHe -Djava.library.path=as definições são ignoradas.

MSalters
fonte
Você, senhor, é o melhor. Depois de horas aplicando a testa no teclado, descobri que o APR / Native estava instalado corretamente o tempo todo. Era um problema de server.xml simples!
imortal squish
3

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

Em seguida, adicione-o aos argumentos do tomcat do eclipse ( clique duas vezes em Servidor> Abrir Configuração de inicialização > guia Argumentos> argumentos VM )

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

Tive esse problema ao atualizar do Java 8 para o 11 . Depois de adicionar essa dependência, meu aplicativo foi iniciado sem problemas:

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

Eu tive o mesmo problema quando o gato não conseguia encontrar a classe. Tente visualizar outros arquivos de log. Às vezes, o erro de Nenhuma classe def encontrada aparece em arquivos de log diferentes:

  • tomcat8-stdout
  • tomcat8-stderr
  • localhost
Koss
fonte
0

Se você não tiver a biblioteca nativa Tomcat, instale-a com:

sudo apt-get install libtcnative-1

e se ainda houver uma versão antiga, atualize-o com:

sudo apt-get upgrade libtcnative-1

Dejan
fonte
0

Meu problema era adicionar alguma biblioteca do tomcat ao caminho de classe do eclipse. Eu só vou eclipse, clique com o botão direito do mouse para projetar e debug configuration -> classpath -> Add External JARsadicionarei todos os arquivos jars apache-tomcat-7.0.35\bindesse foi o meu problema e funcionou para mim.
insira a descrição da imagem aqui

Abd Abughazaleh
fonte