Bibliotecas Nativas do Tomcat

As bibliotecas nativas do Tomcat são interfaces JNI para aumentar o desempenho das aplicações que rodam no servidor Tomcat através de chamadas nativas. Quando você não tem essas libs no library path do java, o Tomcat exibe a seguinte informação no log: "INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path".

O primeiro passo é instalar as bibliotecas do APR e do OpenSSL. Para isso, execute o seguinte comando no Ubuntu (ou similares Debian):

sudo apt-get install libapr1-dev libssl-dev

Em distribuições que usam RPM você pode utilizar o seguinte comando:

yum install apr-devel openssl-devel

Baixe o código fonte no site: http://tomcat.apache.org/download-native.cgi, descompacte em uma pasta, acesse a subpasta jni/native e execute o seguinte comando:

./configure --with-apr=$HOME_APR \
--with-java-home=$JAVA_HOME \
--with-ssl=$HOME_OPENSSL \
--prefix=$CATALINA_HOME

Onde $HOME_APR é o caminho onde o APR está instalado, $JAVA_HOME é o caminho do Java, $HOME_OPENSSL é onde o OpenSSL está instalado e $CATALINA_HOME é o diretório do Tomcat ou um local específico que você queira colocar as libs. No meu caso ficou assim:

./configure --with-apr=/usr/bin/apr-1-config \
--with-java-home=/usr/lib/jvm/java-6-sun \
--with-ssl=/usr/include/openssl \
--prefix=/opt/tomcat/native

Digite "make" e aguarde a compilação. Para testar (opcional) digite o seguinte comando:

cd..
ant jar
ant run-echo

Caso você tenha algum erro dizendo que o ant não está instalado, digite:

sudo apt-get install ant

E repita o comando anterior. Caso contrário, você deverá ter uma saída com a versão da biblioteca utilizada:

[echo] Running Tomcat Native Echo example ...
[java] Info ...
[java]   Native        1.1.22
[java]   APR           1.3.8
...

Digite "make install" e verifique se a lib libtcnative foi criada na pasta lib do diretório especificado ($CATALINA_HOME). Eu prefiro deixar as libs em pastas separadas para utilizar em diversos Tomcat. Então nesse caso é necessário incluir a seguinte linha no início do bin/catalina.sh:

CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/opt/tomcat/native/lib"

Substitua para o caminho adequado para o seu ambiente. Inicie o Tomcat. Verifique o log e caso tenha o seguinte problema:

"Catalina";  Protocol handler start failed: java.lang.Exception: Socket bind failed: [22] Invalid argument

É porque a versão de Tomcat utilizada está com bug, Obtive esse problema com a versão 6.0.18. Atualize o Tomcat para uma versão mais recente (nesse tutorial utilizei a 6.0.33) e o problema deverá sumir.

Se você obteve no log as seguintes linhas:

...
INFO: Loaded APR based Apache Tomcat Native library 1.1.22.
...
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].

Significa que já está utilizando a otimização de bibliotecas nativas.

Para realizar essa mesma configuração para o JBoss o procedimento é diferente. Para isso consulte o seguinte site: http://www.jboss.org/jbossweb/native

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6